2017-03-28 8 views
0

私は現在pylintで作業しています.1つのファイルをリイントするとエラーが表示されます(以下のrepro)。私はazure sdkを使用していますが、それは私が参照しているパッケージであり、重要ではないはずです。このスクリプトファイルを実行なぜpylintはこのパッケージのモジュールを見つけることができませんか?

はリプロ

$ mkdir pylinttesting && cd pylinttesting 
$ python3 -m venv venv 
$ . venv/bin/activate 
$ pip3 install azure==2.0.0rc6 
$ echo 'from azure import mgmt' > app.py 

何ら問題は生じない(python3 app.py

pylint出力

これは完全に有効であり、実行/エラーなしの輸入は、pylintはまだそれについて不平を言うにもかかわらず。以下の関連出力(簡略化のために省略)...

E: 1, 0: No name 'mgmt' in module 'azure' (no-name-in-module) 

External dependencies 
--------------------- 
:: 

    azure (app) 

しかし、私は...(同じ仮想環境で)

import os 
import pkgutil 
import azure 

package_path = os.path.dirname(azure.__file__) 
[print(name) for _, name, _ in pkgutil.iter_modules([package_path])] 

をこの小さなスニペットを実行している場合...私はazuremgmtモジュール命だから、明らかに...

batch 
common 
mgmt 
servicebus 
servicemanagement 
storage 

を次の出力を得ますパッケージ。しかし、私はピリンがなぜそれを選んでいないのだろうと思っていますか?

from azure import common(共通はパッケージ内の別のモジュール)を実行すると、pylintはエラーをスローしません。

パッケージ内のこのmgmtモジュールでpylintがなぜ不満なのでしょうか?

EDIT:pylintのバージョン情報...

pylint 1.6.5, 
astroid 1.4.9 
Python 3.6.0 (default, Dec 24 2016, 00:01:50) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] 

答えて

2

あなたはありません(まだ)サポートdeclare_namespace for creating namespacesを行いPylintバージョンを使用しています。あなたが使用しているパイリント/アストロイドのバージョンは何ですか?

類似の問題とこの名前空間の作成をサポートするコードへのリンクについては、https://github.com/PyCQA/pylint/issues/687を参照してください。

Pylintは実際に解析中にPythonコードを実行しないため、カスタムコードを記述することで非標準(推論不可能)な構造のほとんどをサポートする必要があります。

+0

私は質問にpylintのバージョン情報を追加しました。だからここに「回避策」はありませんか?私はこのルールを無視することができたと思う..?または、私はgithubからこれをサポートしている明らかなブランチを得るためにクローンを作成できますか?私はそれが正しい場合、私の選択肢のように見えますか?ご回答有難うございます! –

+1

@ThomasStringerはい、それは問題です.PylintはPythonコードを実行しないので、フードの下で何が起こっているのかを知る機会はありません。この構造の理解は、Pylintのコードで明示的に実装する必要がありました。この機能は準備が整いましたが、まだ出荷されていないようです。私たちはできるだけ早く1.7.0を出荷する予定ですが、それを望むならリポジトリのマスターブランチから 'pylint'と' astroid'を使う必要があります。 –

+0

パーフェクト! pylint 1.7と小惑星1.5は魅力的に働いた!ありがとう! –

関連する問題