実行用の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)
$ 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)
これは、PyLintの既知の未解決の問題です。
ディレクトリ内のすべてのファイルをリント(open)
パッケージではないpythonファイル)のフォルダーをサポートすることを検討してください(重複、閉じています)
残念ながら、議論で見ることができるように、誰もそれに取り組み続けませんでした。
この問題は、私たちのいくつかのプロジェクトで発生しました。
これらのプロジェクトの1つでは、ごく最近ビルドが成功しましたが、突然すべてが理由もなく失敗し始めました。最後に成功したビルドまでCIログに移動し、インストールされているすべてのバージョンを正確にコピーしました。そのように構築するとき、すべてがうまくいきました。新しいバージョンは失敗します。
このプロジェクトで成功したビルドは23.02.2019で、失敗したビルドは25.02.2019でした。実質的な変更は導入されていません。以前と同じ状態で実行し、再び失敗します...
これにさらに数時間投資したところ、次のことがわかりました。
デバッグ中に、他のエラーが発生し始めました。 astroid
released version 2.2. in 27.02.2019であることが判明し、これは基本的にpylint
を壊しました。 astroid
をバージョンに固定すると2.1.この問題は解決します。パッチがリリースされるか、pylint
が新しいバージョンの処理を開始するまで、このままにしておきます。これについてはGithubに issue があります。
astroid
の問題に対処すると、一部のディレクトリに___init__.py
_ファイルがないために失敗に戻りました(これらはPython 3.7プロジェクトであり、空の___init__.py
_ファイル...)
古い組み合わせが機能し、新しい組み合わせが機能しなかった理由を見つけるために、いくつかの試みが行われました。多くの失敗したビルドの後、[〜#〜] patch [〜#〜]pdatepylint
--isort
--from-の別の依存関係があることがわかりました。 4.3.4から4.3.5、25.02.2019でリリースされ、バグが発生しました。バージョン4.3.4にピン留めすると問題なく動作しました。それ以上のものはすべて失敗します。正直なところ、その更新はセマンティックバージョニングのルールに準拠していませんでした(間違いなく[〜#〜]パッチリリースではありません[〜#〜]パッチリリースです...それはおそらく[〜#〜] major [〜#〜]!)。
なぜ正確にisort
がこれを引き起こしているのか、私はまだ見つけることができませんでしたが、ここでこれらの調査結果を共有することにしました。これにより、数時間の試行錯誤を節約できます。
TL; DR:
これを_requirements.txt
_に追加します(少なくともpylint
の次のリリースまで):
_# 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
_