特定のモジュールをVSコードでデバッグするように正しく設定するにはどうすればよいですか?


8

私はVSコードのウェブサイトの指示に従っていましたが、私が試したものは何もうまくいかなかったようです。

必要に応じて新しい構成を作成しましたが、パスを配置すると、VSコードでの動作が拒否されますが、手動で呼び出すと、統合ターミナルウィンドウでVSコードが問題を報告します。

デバッガーがスローするエラーは次のとおりです。

(automl-meta-learning) brandomiranda~/automl-meta-learning/automl/experiments  env PTVSD_LAUNCHER_PORT=59729 /Users/brandomiranda/miniconda3/envs/automl-meta-learning/bin/python /Users/brandomiranda/.vscode/extensions/ms-python.python-2020.2.63072/pythonFiles/lib/python/new_ptvsd/wheels/ptvsd/launcher -m /Users/brandomiranda/automl-meta-learning/automl/experiments/experiments_model_optimization.py 
E+00000.025: Error determining module path for sys.argv

             Traceback (most recent call last):
               File "/Users/brandomiranda/.vscode/extensions/ms-python.python-2020.2.63072/pythonFiles/lib/python/new_ptvsd/wheels/ptvsd/../ptvsd/server/cli.py", line 220, in run_module
                 spec = find_spec(options.target)
               File "/Users/brandomiranda/miniconda3/envs/automl-meta-learning/lib/python3.7/importlib/util.py", line 94, in find_spec
                 parent = __import__(parent_name, fromlist=['__path__'])
             ModuleNotFoundError: No module named '/Users/brandomiranda/automl-meta-learning/automl/experiments/experiments_model_optimization'

             Stack where logged:
               File "/Users/brandomiranda/miniconda3/envs/automl-meta-learning/lib/python3.7/runpy.py", line 193, in _run_module_as_main
                 "__main__", mod_spec)
               File "/Users/brandomiranda/miniconda3/envs/automl-meta-learning/lib/python3.7/runpy.py", line 85, in _run_code
                 exec(code, run_globals)
               File "/Users/brandomiranda/.vscode/extensions/ms-python.python-2020.2.63072/pythonFiles/lib/python/new_ptvsd/wheels/ptvsd/__main__.py", line 45, in <module>
                 cli.main()
               File "/Users/brandomiranda/.vscode/extensions/ms-python.python-2020.2.63072/pythonFiles/lib/python/new_ptvsd/wheels/ptvsd/../ptvsd/server/cli.py", line 361, in main
                 run()
               File "/Users/brandomiranda/.vscode/extensions/ms-python.python-2020.2.63072/pythonFiles/lib/python/new_ptvsd/wheels/ptvsd/../ptvsd/server/cli.py", line 226, in run_module
                 log.exception("Error determining module path for sys.argv")


/Users/brandomiranda/miniconda3/envs/automl-meta-learning/bin/python: Error while finding module specification for '/Users/brandomiranda/automl-meta-learning/automl/experiments/experiments_model_optimization.py' (ModuleNotFoundError: No module named '/Users/brandomiranda/automl-meta-learning/automl/experiments/experiments_model_optimization')

それから私はそれが手動で不平を言うファイルを実行しようとしました、そしてそれはそれをうまく動かします...

(automl-meta-learning) brandomiranda~/automl-meta-learning/automl/experiments  python /Users/brandomiranda/automl-meta-learning/automl/experiments/experiments_model_optimization.py
--> main in differentiable SGD
-------> Inside Experiment Code <--------

---> hostname:

device = cpu
Files already downloaded and verified
Files already downloaded and verified
Files already downloaded and verified

パス名にカーソルを合わせてクリックしてもcommand + click、VSコード内からパスに移動します。それはおかしなようです。したがって、どういうわけか、デバッガモードで実行した場合にのみ機能しません。どうして?


Launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "Python: Experiments Protype1",
            "type": "python",
            "request": "launch",
            "module": "${workspaceFolder}/automl/experiments/experiments_model_optimization.py" // ~/automl-meta-learning/automl/experiments/experiments_model_optimization.py
        },
        {
            "name": "Python: Current File (Integrated Terminal)",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        },
        {
            "name": "Python: Remote Attach",
            "type": "python",
            "request": "attach",
            "port": 5678,
            "host": "localhost",
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}",
                    "remoteRoot": "."
                }
            ]
        },
        {
            "name": "Python: Module",
            "type": "python",
            "request": "launch",
            "module": "enter-your-module-name-here",
            "console": "integratedTerminal"
        },
        {
            "name": "Python: Django",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/manage.py",
            "console": "integratedTerminal",
            "args": [
                "runserver",
                "--noreload",
                "--nothreading"
            ],
            "django": true
        },
        {
            "name": "Python: Flask",
            "type": "python",
            "request": "launch",
            "module": "flask",
            "env": {
                "FLASK_APP": "app.py"
            },
            "args": [
                "run",
                "--no-debugger",
                "--no-reload"
            ],
            "jinja": true
        },
        {
            "name": "Python: Current File (External Terminal)",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "externalTerminal"
        }
    ]
}

クロスポスト:


現在のlaunch.jsonファイルの内容を投稿してください。特に、この場合はprogramとのpythonPath値が重要です。
ニマ

@nimaがすべてを投稿しました!そのことを思い出させてくれてありがとう。なんとなく忘れました。
チャーリーパーカー

回答:


3

module代わりにを使用programしていlaunch.jsonます。モジュールを使用する場合、パス全体ではなく、モジュール\サブモジュール名のみを渡す必要があります。Visual Studioは指定されたモジュールをロードして、その__main__.pyファイルを実行します。

automlがモジュールで、experimentsがサブモジュールであると仮定すると、これは正しい入力です。

"module": "automl.experiments"

スクリプトを直接ポイントする場合は、以前に使用していたパスを使用できます。次のように変更moduleprogramます。

"program": "${workspaceFolder}/automl/experiments/experiments_model_optimization.py"


どのようにあなたのホームパスのためにVSコードを記入させますか?つまり、私が持っていた場合~/foo/main.py、VSコードをどのように埋めることができ~ますか?
チャーリーパーカー

1
Linuxをインストールしていないので確認できませんが、を試すことができます${env:HOME}${workspaceFolder} 「プロジェクト」を任意のフォルダに移動できるので、を使用することをお勧めします。参考までに:code.visualstudio.com/docs/editor/variables-reference
Gabriel Cappelli

うまくいきました!マネーサイン$のぞき見を必ず含めてください!
チャーリーパーカー

1

これが私がしたことです。launch.json左側のデバッガータブに移動してファイルを開くと、次のようになります。

ここに画像の説明を入力してください

次に、クリックしAdd configurationlaunch.jsonファイルを開きました。次に、右下に青いボタンがありAdd Configurationます:

ここに画像の説明を入力してください

次に、選択後に表示されるstexに入力しましたPython file。表示されたテキストは次のとおりです。

        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        }

そして私はそれを次のように変更しました:

        {
            "name": "Python: My Trainable",
            "type": "python",
            "request": "launch",
            "program": "/Users/brandomiranda/automl-meta-learning/prototyping_tests_playground/trainable_optimizers/my_trainable.py",
            "console": "integratedTerminal"
        },

次に、左側のデバッグメニューでそれを選択したことを確認しました。ショートカットで実行するたびF5に、VSコードのどこにいても正しいファイルが実行されるようにしました。


現行ファイル:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "Python: My Trainable Step Size Higher",
            "type": "python",
            "request": "launch",
            "program": "/Users/brandomiranda/automl-meta-learning/prototyping_tests_playground/trainable_optimizers/trainable_step_size.py",
            "console": "integratedTerminal"
        },
        {
            "name": "Python: Experiments Protype1",
            "type": "python",
            "request": "launch",
            "program": "${env:HOME}/automl-meta-learning/automl/experiments/experiments_model_optimization.py",
            "console": "integratedTerminal"
        },
        {
            "name": "Python: Current File (Integrated Terminal)",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal"
        },
        {
            "name": "Python: Remote Attach",
            "type": "python",
            "request": "attach",
            "port": 5678,
            "host": "localhost",
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}",
                    "remoteRoot": "."
                }
            ]
        },
        {
            "name": "Python: Module",
            "type": "python",
            "request": "launch",
            "module": "enter-your-module-name-here",
            "console": "integratedTerminal"
        },
        {
            "name": "Python: Django",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/manage.py",
            "console": "integratedTerminal",
            "args": [
                "runserver",
                "--noreload",
                "--nothreading"
            ],
            "django": true
        },
        {
            "name": "Python: Flask",
            "type": "python",
            "request": "launch",
            "module": "flask",
            "env": {
                "FLASK_APP": "app.py"
            },
            "args": [
                "run",
                "--no-debugger",
                "--no-reload"
            ],
            "jinja": true
        },
        {
            "name": "Python: Current File (External Terminal)",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "externalTerminal"
        }
    ]
}

${end:HOME}ホームパスを取得するために重要であると思われます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.