如何为目录中的所有Python文件运行Pylint

时间:2016-04-26 18:34:28

标签: python pylint

我有

find . -iname "*.py" -exec pylint -E {} ;\

FILES=$(find . -iname "*.py")
pylint -E $FILES

如果我理解正确,第一个命令将为每个Python文件运行pylint,第二个命令将为所有文件运行pylint一次。我希望两个命令都会返回相同的输出,但它们会返回不同的结果。我认为这种差异与导入和F(失败)pylint消息有某种关系,这种情况在导入失败并且pylint -E 输出时发生。

有人已经经历过这个并且可以解释为什么差异发生以及运行pylint的最佳方式是什么?

14 个答案:

答案 0 :(得分:28)

我的一分钱

find . -iname "*.py" | xargs pylint 

它是如何运作的?

find发现所有文件都以py结尾,并在每个文件上传递给xargsxargs运行pylint命令。

注意:您也可以为pylint命令提供任何参数。

编辑:

根据doc我们可以使用

[1] pylint mymodule.py

[2] pylint目录/ mymodule.py

如果directory是python包(即有一个__init__.py文件或它是一个隐式命名空间包)或者如果“directory”在python路径中,那么

[2]将起作用。

答案 1 :(得分:21)

只需将目录名称传递给pylint命令即可。要隐藏$helm repo add helm_interface http://9.21.61.150:32576/artifactory/helm_interface Error: Looks like "http://9.21.61.150:32576/artifactory/helm_interface" is not a valid chart repository or cannot be reached: Failed to fetch http://9.21.61.150:32576/artifactory/helm_interface/index.yaml : 404 Not Found 中的所有文件:

./server

答案 2 :(得分:12)

对于目录中的所有python文件,您可以运行:

pylint *.py
对于目录及其子目录中的所有python文件,可以运行:
pylint **/*.py

答案 3 :(得分:7)

要在Git版本控制中的所有代码上运行Pylint,

pylint $(git ls-files '*.py')

这非常快,因为Git已经知道所有文件的名称。它也可以在缺少Bash 4的macOS上运行。但是,它不会删除新文件并且尚未git add存放到存储库中的文件。

答案 4 :(得分:4)

我在根目录下使用:

go run main.go

答案 5 :(得分:3)

如果您在目录中没有__init__.py文件,并且由于各种原因您不想这样做,我的方法是

touch __init__.py; pylint <folder-name>; rm __init__.py

答案 6 :(得分:2)

您尝试使用psospector(https://pypi.org/project/prospector/)还是pylint_runner(https://pypi.org/project/pylint_runner/

答案 7 :(得分:2)

我使用“ pylint_runner”来对目录和子目录中的所有文件运行pylint。 Python 3.7.4

pylint_runner 0.54

pylint 2.4.1

https://pypi.org/project/pylint_runner/

以下是从Docker容器运行它的命令:

docker run -i --rm --name my_container \
  -v "$PWD":"$PWD" -w "$PWD" \
    python:3.7 \
      /bin/sh -c "pip3 install -r requirements.txt; pylint_runner -v"

requirements.txt-应该存在于“ $ PWD”目录中,并包含“ pylint_runner”条目。

答案 8 :(得分:1)

已经有一个issue for this,希望很快就能解决。

如果您不喜欢使用xargs,则可以使用普通的find-exec:

find . -type f -name "*.py" -exec pylint -j 0 --exit-zero {} \;


pylint Project-Dir遇到的问题是所有绝对进口都无法使用。

答案 9 :(得分:0)

如果您的目标是在当前工作目录和子文件夹中的所有文件上运行pylint,这是一种解决方法。该脚本在当前目录上运行pylint。如果__init__.py不存在,它将创建它,运行pylint,然后将其删除。

#! /bin/bash -
if [[ ! -e __init__.py ]]; then
    touch __init__.py
    pylint `pwd`
    rm __init__.py
else
    pylint `pwd`
fi

答案 10 :(得分:0)

如果要运行自定义配置文件,请使用以下命令

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/gijgo@1.9.6/css/gijgo.min.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/gijgo@1.9.6/js/gijgo.min.js" type="text/javascript"></script>
<div id="fromDatetoDate"></div>
<!--  this one to show dates  -->
<form id="areaFormID" method="get">
  <div class="container">
    <h4>Start Date:</h4>
    <input type="text" id="startdate" name="fromdate" width="276" placeholder="dd/mm/yyyy" required />
    <h4>End Date:</h4>
    <input type="text" id="enddate" name="todate" width="276" placeholder="dd/mm/yyyy" required />
    <h4>Outlets:</h4>
    <select name="outlet" id="myselect">

      <option>ALL</option>
      <option>1</option>
      <option>2</option>
    </select>

    <div>
      <br>
      <button id="btn-search" class="btn btn-default" type="submit">
					<i class="fa fa-search"></i>&nbsp;Search
				</button>
    </div>
  </div>
</form>

答案 11 :(得分:0)

  1. touch __init__.py在当前目录中
  2. 您想要pylint查看的每个子目录中的
  3. touch __init__.py
  4. pylint $(pwd)(或等效为pylint /absolute/path/to/current/directory

答案 12 :(得分:0)

pytestpytest-pylint可以在所有Python文件上简单地运行pylint:

在您的setup.cfg中,确保您至少拥有:

[tool:pytest]
addopts = --pylint 

下一步,在命令行上运行pytest -v

答案 13 :(得分:0)

要在所有子目录中运行Pylint,

pylint $(find [a-z]* -type d)

此解决方案比其他解决方案更简单,更直接。它无需安装即可使用,包括在没有Bash 4的macOS上。

之所以使用[a-z]*是因为大多数项目都有Git或其他魔术子目录,这会污染结果。如果您有以大写字母开头的子目录,请使用以下变体:

pylint $(find [a-zA-Z]* -type d)