web-dev-qa-db-ja.com

pythonモジュールのvscodeインポートエラー

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}"
 }
18
Chandan Nayak

これを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"

それがあなたを助けることができればいいのに! :)

20
PhilipWu

この解決策は、この問題を永久に解決するのに役立ちます。手順は以下のとおりです。

  1. 「Ctrl + Shift + P」を押す
  2. タイプ:「言語固有の設定を構成する」
  3. 次に「Python」を選択します
  4. 「settings.json」が開きます。このjsonファイルに次のような行があるかどうかを確認します。
  5. はいの場合は、この行を削除またはコメント化し、ファイルを保存してVScodeを再ロードします。
  6. できた!
3
Mubashar javed

よろしくお願いしますHonza Kalfus jankalfus

[ファイル]-> [フォルダを閉じる]を選択し、次に[ファイル]-> [フォルダを開く...]を使用してプロジェクトフォルダを再度開くと、エラーが発生しないことに気づきました。代わりにVS Codeを再起動すると、エラーが発生し続けます。内部キャッシュがクリアされると思いますか?

ここにあります https://github.com/Microsoft/vscode/issues/10391

3
dcarl661

私は同じ問題を抱えていましたが、私の場合は、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"
0
Paulus

私の場合、それは関係ありません

"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",
0
Dylan Wang