如何在VS Code中调试Python项目的非主入口cli方法?
解决方案
错误原因
你之前的配置错误地将module设为mymodule.cli,但cli是mymodule模块中的函数而非子模块,导致Python无法找到对应的模块规范。
方案1:直接调用函数(无需修改代码)
修改launch.json,通过Python的-c参数执行代码导入并调用cli函数,同时调整命令行参数的解析逻辑:
{ "name": "myentrypoint", "type": "debugpy", "request": "launch", "program": "${env:VIRTUAL_ENV}/bin/python", "args": [ "-c", "from mymodule import cli; import sys; sys.argv = ['myentrypoint'] + sys.argv[1:]; cli()", "--arg1", "value1", "--arg2", "value2" ], "console": "integratedTerminal", "justMyCode": true, "cwd": "${workspaceFolder}" }
${env:VIRTUAL_ENV}/bin/python指向Poetry创建的虚拟环境中的Python解释器,确保依赖环境正确- 调整
sys.argv是为了让cli函数的参数解析逻辑能正确识别脚本名称,避免参数解析错误
方案2:利用Poetry脚本直接调试
直接调用poetry run命令启动入口,确保调试环境与日常运行完全一致:
{ "name": "myentrypoint (Poetry)", "type": "debugpy", "request": "launch", "program": "$(which poetry)", "args": [ "run", "myentrypoint", "--arg1", "value1", "--arg2", "value2" ], "console": "integratedTerminal", "justMyCode": true, "cwd": "${workspaceFolder}" }
- 若
$(which poetry)无法正常解析,可替换为Poetry的实际安装路径(比如/home/yourname/.local/bin/poetry)
方案3:添加极简入口代码(侵入性低)
在mymodule/__init__.py中添加几行代码,为模块增加可直接启动的入口:
if __name__ == "__main__": import sys from . import cli cli()
然后修改launch.json为:
{ "name": "myentrypoint", "type": "debugpy", "request": "launch", "module": "mymodule", "console": "integratedTerminal", "args": [ "--arg1", "value1", "--arg2", "value2" ], "justMyCode": true, "env": { "PYTHONPATH": "${workspaceFolder}:${env:PYTHONPATH}" } }
PYTHONPATH配置确保Python能找到项目根目录下的mymodule模块- 此修改仅在直接启动模块时生效,不影响Poetry脚本的原有运行逻辑
内容的提问来源于stack exchange,提问作者Raphael Roth
相关产品推荐
相关产品推荐

