Wie kann ich ein bestimmtes Modul so einstellen, dass es im VS-Code debuggt?

8

Ich folgte den Anweisungen auf der Website von VS Code, aber es schien, dass nichts, was ich versuchte, funktionierte.

Ich habe nach Bedarf eine neue Konfiguration erstellt, aber wenn ich den Pfad eingebe, funktioniert er nicht im VS-Code, obwohl der Pfad, über den sich der VS-Code im integrierten Terminalfenster beschwert, gut funktioniert, wenn ich ihn manuell aufrufe.

Der Fehler, den der Debugger auslöst, ist folgender:

(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')

dann habe ich versucht, die Datei auszuführen, die es manuell beschwert und es läuft gut ...

(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

Selbst wenn ich den Mauszeiger über den Pfadnamen bewege und mit command + clickdarauf klicke, komme ich aus dem VS-Code zum Pfad. Welches scheint bizzare. Nur irgendwie funktioniert es nicht, wenn ich es im Debugger-Modus ausführe. Warum?


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"
        }
    ]
}

Cross-posted:

Charlie Parker
quelle
Bitte posten Sie Ihren aktuellen launch.jsonDateiinhalt. Insbesondere sind die programund pythonPath-Werte in diesem Fall wichtig.
Nima
@nima hat das Ganze gepostet! Danke, dass du mich daran erinnert hast. Irgendwie vergessen.
Charlie Parker

Antworten:

3

Sie verwenden moduleanstelle von programin launch.json. Wenn Sie ein Modul verwenden, müssen Sie nur den Namen des Moduls \ Untermoduls übergeben, nicht den gesamten Pfad. Visual Studio lädt dann das angegebene Modul und führt seine __main__.pyDatei aus.

Dies wäre die richtige Eingabe, vorausgesetzt, automl ist ein Modul und Experimente ist ein Submodul:

"module": "automl.experiments"

Wenn Sie direkt auf Ihr Skript verweisen möchten, können Sie den zuvor verwendeten Pfad verwenden und einfach modulezu program:

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

Gabriel Cappelli
quelle
Wie lässt du VS-Code für deinen Heimatpfad ausfüllen? Wenn ja ~/foo/main.py, wie kann ich VS-Code ausfüllen lassen ~?
Charlie Parker
1
Ich habe keine Linux-Installation, daher kann ich nicht überprüfen, aber Sie können es versuchen ${env:HOME}. Ich würde die Verwendung empfehlen ${workspaceFolder} , da Sie damit Ihr "Projekt" in einen beliebigen Ordner verschieben können. Als Referenz: code.visualstudio.com/docs/editor/variables-reference
Gabriel Cappelli
yup das hat funktioniert! Stellen Sie sicher, dass Sie die Geldzeichen- $Blicke einschließen !
Charlie Parker
1

Das habe ich also getan. Sobald ich die launch.jsonDatei geöffnet habe, gehe ich zur Registerkarte Debugger auf der linken Seite:

Geben Sie hier die Bildbeschreibung ein

dann habe ich auf geklickt Add configurationund dann die launch.jsonDatei geöffnet. Dann gibt es unten rechts einen blauen Boden mit Add Configuration:

Geben Sie hier die Bildbeschreibung ein

dann füllte ich den Stex aus, der nach der Auswahl erschien Python file. Der Text, der erschien, war:

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

und ich habe es geändert in:

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

Dann habe ich sichergestellt, dass ich es im linken Debug-Menü ausgewählt habe, damit jedes Mal, wenn ich es mit der F5Verknüpfung ausführte, die richtige Datei ausgeführt wurde, unabhängig davon, wo ich mich im VS-Code befand.


Aktuelle Datei:

{
    // 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"
        }
    ]
}

scheint ${end:HOME}wichtig zu sein, um nach Hause zu kommen.

Charlie Parker
quelle