pythonで1つのディレクトリレベルからインポートしようとしています。
import sys
sys.path.append('..')
from cn_modules import exception
次のようにビルドタスクを実行しようとすると、VSCodeからエラーが発生します。
ImportError:cn_modulesという名前のモジュールはありません
同じコードはターミナルからのエラーなしで機能します(python)。
それを実行しようとすると問題が発生しますVSCode Run Buildタスクから。
ここで何が問題になっているのかについての手掛かりはありますか?
しばらく静かに過ごしましたが、これを解決することができませんでした。
注:これは、vscodeを使用してデバッグする場合にも機能します。以下は、launch.jsonとtasks.jsonの設定です。
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Python Console App",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"program": "${file}",
"externalConsole": true,
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit"
],
"env": {},
"envFile": "${workspaceRoot}/.env",
"console":"integratedTerminal",
"pythonPath": "${config:python.pythonPath}"
}
]
}
tasks.json
{
"version": "0.1.0",
"command": "/usr/bin/python",
"isShellCommand": true,
"args": ["${file}"],
"showOutput": "always",
"env": {},
"envFile": "${workspaceRoot}/.env",
"pythonPath": "${config:python.pythonPath}"
}
これをlaunch.json
に追加しようとしたところ、うまくいきました!
"env": {"PYTHONPATH": "${workspaceRoot}"}
以下は私のlaunch.json
です
"name": "Python: Current File (Integrated Terminal)",
"type": "python",
"request": "launch",
"program": "${file}",
"cwd": "${workspaceRoot}",
"env": {"PYTHONPATH": "${workspaceRoot}"},
"console": "integratedTerminal"
それがあなたを助けることができればいいのに! :)
この解決策は、この問題を永久に解決するのに役立ちます。手順は以下のとおりです。
よろしくお願いしますHonza Kalfus jankalfus
[ファイル]-> [フォルダを閉じる]を選択し、次に[ファイル]-> [フォルダを開く...]を使用してプロジェクトフォルダを再度開くと、エラーが発生しないことに気づきました。代わりにVS Codeを再起動すると、エラーが発生し続けます。内部キャッシュがクリアされると思いますか?
私は同じ問題を抱えていましたが、私の場合は、vscodeデバッグプロセスの現在のディレクトリが、スクリプトが置かれていたディレクトリとは異なるために発生しました。
print('cwd is %s' %(os.getcwd()))
sys.path.append
とインポートの直前。私に起こったのは、実行環境cwdがワークスペースディレクトリにデフォルトであるように見えることです。これは、vsコードプロジェクトファイルを含むディレクトリのようです。これがスクリプトのある場所にない場合、相対インクルードパスが壊れています。
これに対する解決策は、スクリプトが現在のディレクトリをスクリプトが配置されているディレクトリに変更することを保証することと、スクリプトが配置されているディレクトリにsyspathを追加することです。
scriptdir = os.path.dirname(os.path.realpath(__file__))
print('dir containing script is %s' % (scriptdir))
# append our extra module directory (in this case Autogen) onto the script directory
sys.path.append(os.path.join(scriptdir, 'Autogen'))
# also change cwd to where the script is located (helps for finding relative files)
print('============\ncwd is %s' %(os.getcwd()))
os.chdir(scriptdir)
print('============\ncwd after change to script dir is %s' %(os.getcwd()))
上記のすべての手順は、スクリプトを適切に実行するのに役立ちますが、インテリセンスやコード補完には役立ちません。コード補完を適切に実行するには、.env
ファイル(通常は.vscodeディレクトリと同じディレクトリにあります)を作成し、.envファイルに、vscodeで追加の[pythonモジュール
.envファイルの内容
PYTHONPATH="someDirRelativeTowhereYourVSCodeProjectLives\\Autogen"
私の場合、それは関係ありません
"env": {"PYTHONPATH": "${workspaceRoot}"}
これが私のフォルダ/モジュール構造です:
/Dev/csproj/deploy/test.py
/Dev/csproj/util/utils.py
そしてtest.pyでは、utils関数をインポートします
import sys
sys.path.append('../')
from util.utils import get_keyvault_secret
ターミナルフォルダー/ Dev/csproj/deploy /でtest.pyを実行しても問題ありません。
しかし、test.pyをデバッグしたい場合、「ModuleNotFoundError」の例外が発生しました
修正するには、これをデバッグ構成のlaunch.jsonに追加します
"cwd": "${workspaceRoot}\\Dev\\csproj\\deploy",