Python 3.x 如果目录不';t包含uuu init_uuuu.py文件

Python 3.x 如果目录不';t包含uuu init_uuuu.py文件,python-3.x,pylint,Python 3.x,Pylint,我的文件夹只包含用于执行的python脚本。没有必要保留\uuuu init\uuuu.py文件。那么我可以忽略这样的错误吗 $ pylint /app Using config file /app/pylintrc ************* F: 1, 0: error while code parsing: Unable to load file /app/__init__.py: [Errno 2] No such file or directory: '/app/__init__.

我的文件夹只包含用于执行的python脚本。没有必要保留
\uuuu init\uuuu.py
文件。那么我可以忽略这样的错误吗

$ pylint /app
Using config file /app/pylintrc
************* 
F:  1, 0: error while code parsing: Unable to load file /app/__init__.py:
[Errno 2] No such file or directory: '/app/__init__.py' (parse-error)

这是PyLint的已知公开发行:

(打开)

(重复,关闭)

不幸的是,正如我们在讨论中看到的那样,没有人继续进行这方面的工作

$sw\u vers
产品名称:Mac OS X
产品版本:10.13.6
构建版本:17G65
$pylint--版本
pylint 2.1.1
星体2.0.3
Python 3.7.0(默认值,2018年7月23日,20:22:55)
[Clang 9.1.0(Clang-902.0.39.2)]
更新 我通过尝试实现了这一目标:

或者尝试:

让整个事情顺利进行。


这个问题出现在我们的一些项目中

在其中一个项目中,我们有一个非常成功的构建,但是突然间一切都无缘无故地失败了。我们查看了上次成功构建的CI日志,复制了所有已安装内容的确切版本。这样建造时,一切正常。新版本将失败

该项目的成功构建时间为2019年2月23日,失败构建时间为2019年2月25日。没有引入实质性的变化。正在以与以前相同的状态运行,再次失败

我们在这方面又投入了几个小时,我们发现:

  • 调试时,其他错误开始发生。结果是
    astroid
    版本2.2.02019年2月27日,这基本上破坏了
    pylint
    。将
    astroid
    钉回版本2.1.0解决了此问题。我们会一直这样做,直到他们发布补丁或者
    pylint
    开始处理新版本。关于这一点,Github上有一条消息

  • 解决了
    astroid
    问题后,我们又回到了由于某些目录中缺少
    \uuuu init\uuuuuuuuuupy
    文件而导致的故障(这些是Python 3.7项目,我们不需要空的
    \uuu init\uuuuuuuuuuupy
    文件…)

  • 为了找出旧组合有效而新组合无效的原因,进行了多次尝试。在大量失败的构建之后,我们发现另一个
    pylint
    --
    isort
    --从4.3.44.3.5,于25.02.2019发布的补丁引入了该漏洞。将其锁定到4.3.4版效果很好。任何高于它的东西都会失败。老实说,该更新没有遵循语义版本控制的规则(它肯定不是一个补丁版本……更可能是一个主要版本!)

为什么
isort
会导致这种情况,我还没有找到,但我决定在这里分享这些发现,这样您就可以节省几个小时的尝试和错误

TL;博士

将此添加到您的
requirements.txt
(至少在下一版本
pylint
之前):


我提出了此解决方案(在Windows上不起作用):


因此,这将包括
/app
目录中的所有
.py
文件以及
/app
目录中的所有目录作为参数,这些目录的根目录中包含一个
\uuu init\uuuuu.py
文件。grep管道正在删除
/app
中以点开头的所有目录名。

pylint检查脚本,而不是目录。只需添加到@JayRizzo的回复中,如果您只想在python文件上运行pylint,请使用
$pylint/path/to/folder/*.py
如果您不使用它,它将在目录中的所有文件上运行(例如:README.md)。您不想在非python文件上运行pylint。是的,您是正确的@Darshak。我忘了添加它。我会在稍后回家时更新。当输入命令为:
pylint--output format=text.| tee./pylint/pylint.log | | pylint exit$?
?@VincentBénet时如何执行此操作:
pylint--output format=text*.py tee./pylint/pylint.log | | pylint exit$
一个看起来更好的命令:
find-api/python/cli-name“*.py”| xargs-pylint
。如果python文件位于目录层次结构中,这种方式将起作用。看起来,我们也需要降级pylint?因为它会错误地显示以下消息:错误:pylint 2.5.2的需求astroid=2.4.0,但您的astroid 2.1.0不兼容。我不确定。我不记得最近有问题我认为当您使用最新版本时,当前的软件包集是兼容的
$ cd /app
$ pylint *.py
$ pylint /path/to/app/*.py
...
Report
======
************* Module <yourmodname>
...
X statements analysed.

Statistics by type
------------------

+---------+-------+-----------+-----------+------------+---------+
|type     |number |old number |difference |%documented |%badname |
+=========+=======+===========+===========+============+=========+
...
$ pylint .
************* Module .
__init__.py:1:0: F0010: error while code parsing: Unable to load file 
__init__.py:
[Errno 2] No such file or directory: '__init__.py' (parse-error)
# astroid 2.2.0 seems to break everything in pylint
astroid==2.1.0
# isort above 4.3.4 introduces the "__init__.py not found" issue
isort==4.3.4
pylint $(echo -n /app/*.py && echo -n ' ' && find /app -type d -maxdepth 1 -exec test -e '{}'/__init__.py \; -print | grep -v '^/app/\.')