我的文件夹只包含用于执行的python脚本。没有必要保留__init__.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)
答案 0 :(得分:6)
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.13.6
BuildVersion: 17G65
$ pylint --version
pylint 2.1.1
astroid 2.0.3
Python 3.7.0 (default, Jul 23 2018, 20:22:55)
[Clang 9.1.0 (clang-902.0.39.2)]
我通过尝试以下方法使它起作用:
$ 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)
答案 1 :(得分:2)
这是一个已知的PyLint问题:
lint all files in a directory (开放)
Consider supporting a folder of python files which is not a package (重复,已关闭)
不幸的是,正如我们在讨论中所看到的,没有人继续努力。
答案 2 :(得分:1)
此问题出现在我们的某些项目中。
在其中一个项目中,我们最近完成了一次成功的构建,但是突然所有事情开始无故失败。我们转到CI日志到上一次成功的构建,复制了已安装所有内容的确切版本。以这种方式构建时,一切正常。新版本将失败。
此项目的成功构建于 23.02.2019 ,而失败的构建于 25.02.2019 。没有引入实质性更改。以与以前相同的状态运行,再次失败...
为此花费了几个小时,我们发现:
在调试时,其他错误开始发生。事实证明, 2019年2月27日的astroid
released版本 2.2.0 基本上已经打破了pylint
。将astroid
固定回版本 2.1.0 可解决此问题。在他们发布补丁或pylint
开始处理新版本之前,我们将一直保持这种状态。 Github上有一个issue。
解决了astroid
问题,由于某些目录中缺少__init__.py
文件(这些是Python 3.7项目,因此我们不需要空{ {1}}个文件...)
进行了几次尝试,以找出旧组合为何有效而新组合无效的原因。经过大量失败的构建之后,我们发现 PATCH update是另一个来自{strong> 4.3.4。的__init__.py
-pylint
的依赖项。在 2019年2月25日发布的/ strong>至 4.3.5 中引入了该错误。将其固定回版本4.3.4很好。上面的任何东西都会失败。老实说,该更新未遵循语义版本控制的规则(肯定不是补丁程序版本,而是 MAJOR !)。
为什么是isort
的确切原因,我现在还找不到,但是我决定在这里分享这些发现,这样可以节省数小时的反复试验。
TL; DR :
将此添加到您的isort
(至少直到下一个requirements.txt
版本):
pylint
答案 3 :(得分:0)
我想出了这个解决方案(不适用于Windows):
pylint $(echo -n /app/*.py && echo -n ' ' && find /app -type d -maxdepth 1 -exec test -e '{}'/__init__.py \; -print | grep -v '^/app/\.')
因此,这将包括.py
目录中的所有/app
文件和/app
目录中的所有目录(其根目录中包含__init__.py
文件)的参数。 grep管道将从点开始删除/app
中的所有目录名称。