我在开发模式下使用pip install -e ./mylocalpkg
安装了一个软件包。
此软件包定义了entry_points.console_script
setup(
name='mylocalpkg',
...
entry_points={
'console_scripts': [
'myscript = mylocalpkg.scriptfile:main'
]
},
...
)
可以使用任何一种方式调用此脚本
$ python -m mylocalpkg.scriptfile
$ myscript
但是,我无法调试此脚本:
$ python -m pdb mylocalpkg.scriptfile
Error: mylocalpkg.scriptfile does not exist
$ python -m pdb myscript
Error: myscript does not exist
如何在调用entry_point脚本时使用pdb
启动调试会话?
答案 0 :(得分:5)
必须使用Python脚本的名称调用pdb
模块,而不是模块。所以你需要给它一个脚本来运行。
如果您使用的是Linux / Unix / Mac,那么您很幸运,因为myscript
实际上是一个Python脚本,因此您可以使用以下选项之一:
python -m pdb `which myscript`
# or
python -m pdb $(which myscript)
这些找到myscript
的位置并将其传递给pdb
模块。如果您碰巧知道,也可以直接指定myscript
的位置。
如果您使用的是Windows,则需要创建一个加载entry_point的脚本,然后对其进行调试。这是一个可以完成这项工作的简短脚本:
# run_myscript.py
import pkg_resources
myscript = pkg_resources.load_entry_point('mylocalpkg', 'console_scripts', 'myscript')
myscript()
然后你可以通过这个命令进行调试:
python -m pdb run_myscript.py
或者,在任何平台上,你都可以使用这个丑陋的单行:
python -c "import pdb, pkg_resources; pdb.run('pkg_resources.load_entry_point(\'mylocalpkg\', \'console_scripts\', \'myscript\')()')"
答案 1 :(得分:0)
导致问题的原因之一不是源文件的安装位置,而是用于 import
语句的语法。
import submodule2
from . import submodule2
如果坚持后一种约定,它就“有效”。
最后,强烈推荐使用 pudb
进行目标调试。没有设置。只需安装即可。 (虽然,apt-install python3-pudb 比尝试将其安装在适当/相同的 venv 中更容易)
本地安装的轮子的示例命令行,命令行条目指向此文件,并显示脚本的参数:
pudb3 /opt/venv/xxx/lib/python3.8/site-packages/xxx/create_xxx.py arg1 --database param1 --host hostbparam.com -