启动Python调试器,同时将模块作为脚本执行

Jed*_*Jed 14 python pdb

在开发Python包时,使用该-m选项在包内运行模块作为快速测试脚本非常方便.例如,对于somepackage其中的模块somemodule.py,调用

python -m somepackage.somemodule
Run Code Online (Sandbox Code Playgroud)

somepackage将运行驻留的目录,somemodule.py就像子模块一样__main__.如果包是使用所描述的明确的相对进口使用该调用语法是特别重要的位置.

同样,使用-m选项来调试脚本也很方便,如

python -m pdb somescript.py
Run Code Online (Sandbox Code Playgroud)

有没有办法同时做两件事?也就是说,我可以将模块称为脚本并同时启动调试器吗?我意识到我可以进入代码本身并插入import pdb; pdb.set_trace()我想要破解的地方,但我试图避免这种情况.

Jed*_*Jed 8

经过一段时间的实验,结果证明这种方法确实有效:

python -c "import runpy; import pdb; pdb.runcall(runpy.run_module, 'somepackage.somemodule', run_name='__main__')"
Run Code Online (Sandbox Code Playgroud)

出于某种原因,使用pdb.runcallover pdb.run非常重要.


Jas*_*mbs 8

努力 正在在Python本身解决这个问题。在Python 3.7中,您可以执行以下操作:

python -m pdb -m somepackage.somemodule
Run Code Online (Sandbox Code Playgroud)

而且我为旧的Python版本(2.7+)提供了backport

pip install backports.pdb
python -m backports.pdb -m somepackage.somemodule
Run Code Online (Sandbox Code Playgroud)

  • `python -m pdb -m path.to.module` 在 python 3.9.5 中非常适合我 (2认同)