このフォルダーのMac OSでpython3.6を使用してvenvを作成しました/Users/kim/Documents/Apps/PythonApps/python36-miros-a3
私はpip install pylint
仮想環境をアクティブにした後
私のワークスペースは/Users/kim/Documents/Apps/WebApps/miros-a3
Vscodeワークスペース内には、次のワークスペース設定があります
{
"folders": [
{
"path": "."
}
],
"settings": {
"python.pythonPath": "/Users/kim/Documents/Apps/PythonApps/python36-miros-a3/bin/python3.6",
"python.venvPath": "/Users/kim/Documents/Apps/PythonApps"
}
}
パイリントのカスタムパスを設定し、venvpathも変更しようとしました。
パイリントは、インポート文が存在しないと言って文句を言い続けました。
ご覧のとおり、これらは同じフォルダーにあり、間違いなくpythonファイルを実行できます。
このような誤検知のインポートエラーを回避するにはどうすればよいですか?
私も次のことを試しました:
code
と入力してここで推奨されているようにvscodeをアクティブにします https://code.visualstudio.com/docs/setup/macPylintにはいくつかの癖があります。この場合、モジュールはvenvパスのサブディレクトリにあるため、モジュールの場所がわかりません。これを解決するには:
この設定をワークスペースまたはフォルダーの設定に追加します。
"python.linting.pylintArgs": [
"--init-hook",
"import sys; sys.path.append('<path to folder your module is in>')"
]
または、多分良い
.pylintrcファイルを生成します。 venvが起動された統合端末から実行:
pylint --generate-rcfile > .pylintrc
次に、生成されたファイルを開き、init-hook =のコメントを外します:
init-hook='import sys; sys.path.append("<path to folder you module is in>")'
必要に応じて、。pylintrcおよびTweak設定を読み取ります。どちらの場合も、パスは「データベース」フォルダーを指す必要があります。
パイリント設定について学習した後、正しい方法でそれを行います:
from database.database_dispatcher import ...
Anthony Sottileによる this answer を参照してください。
私にとって、pylint
はこのエラーにフラグを立てるのに正しい
最上位モジュールはdatabase
です(__init__.py
ファイルが含まれます)
インポートは次のようになります(完全に絶対)
from database.database_dispatcher import ...
または(明示的な相対)(はい!モジュール名の前の.
は意図的です)
from .database_dispatcher import ...
私のフォローアップの推測では、あなたは現在python ./database/main.py ...
の先頭に./database
を置くsys.path
としてスクリプトを呼び出しているので、が表示されますインポートが正しく機能していること-これはモジュール構造を回避しています。代わりにpython -m database.main ...
を使用してスクリプトを呼び出す必要があります。
暗黙的相対インポートは、python 3.x-この(imo)スクリプトのいぼsys.path
挿入は残ります。