簡體   English   中英

如何使用 VSCode 調試器調試 Python console_script 命令行應用程序?

[英]How can I debug Python console_script command line apps with the VSCode debugger?

我有一個 Python 包package_name ,它提供了一個命令行應用程序command-line-app-name作為console_script

setup.py

setup(
    ...
    entry_points={"console_scripts": ["command-line-app-name=package_name.cli:main"]},
    ...
)

virtualenv 位於<project>/.venv並使用pipenv管理。 pipenv管理的 venv 應該支持 VSCode 調試集成。 我創建了一個調試器配置launch.json文件,其中設置了 venv ( pythonPath ) 的 Python 路徑:

{
    // 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: command-line-app-name",
            "type": "python",
            "request": "launch",
            "stopOnEntry": false,
            "program": "command-line-app-name",
            "linux": {
                "pythonPath": "${workspaceFolder}/.venv/bin/python",
                "args": ["-r", "/home/florian/gitlab/package_name/data/Test_MRM.d"]
            },
            "windows": {
                "pythonPath": "${workspaceFolder}/.venv/Scripts/python.exe",
                "args": ["-r", "D:\\MassHunter\\Data\\demo_0000.d"],
            },
            "console": "integratedTerminal"
        }
    ]
}

Windows 和 Linux 特定的 venv python 可執行文件和命令行參數不應該有影響。 如果我運行調試器,我會得到: FileNotFoundError: [Errno 2] No such file or directory: '/home/florian/gitlab/package-name/command-line-app-name' 似乎我以某種方式誤解了文檔。 我試圖找到幫助 wrt vscode-python以及debugpy沒有成功。 如何調試控制台腳本命令行應用程序(而不是包模塊)?

console_scripts不能開箱即console_scripts調試。 解決方案是直接調用入口點函數( "program": "${workspaceRoot}/package_name/cli.py", )。 這需要在相應的模塊中添加if __name__ == '__main__': idiom(這里是: cli.py )。 在我的情況下,使用的命令行參數解析器是click 然而,其他命令行解析器庫的偽代碼應該非常相似。

package_name/cli.py

@click.command()
@click.option(...)
def main(<args>, <kwargs>):
    ...


if __name__ == '__main__':
    main()  # pylint: disable=no-value-for-parameter

.vscode/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: command-line-app-name",
            "type": "python",
            "request": "launch",
            "stopOnEntry": false,
            "program": "${workspaceRoot}/package_name/cli.py",
            "linux": {
                "pythonPath": "${workspaceFolder}/.venv/bin/python",
                "args": ["-r", "/home/florian/gitlab/package_name/data/Test_MRM.d"]
            },
            "windows": {
                "pythonPath": "${workspaceFolder}/.venv/Scripts/python.exe",
                "args": ["-r", "D:\\MassHunter\\Data\\demo_0000.d"],
            },
            "console": "integratedTerminal"
        }
    ]
}

注意:用於管理 venv 的工具有所不同。 該解決方案確實以防VENV與管理工作pipenv 如果 venv 是用poetry管理的,則該解決方案不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM