2017-08-29 110 views
3

我在开发模式下使用pip install -e ./mylocalpkg安装了一个软件包。如何使用entry_point脚本启动调试程序

这个包定义了一个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

回答

2

pdb模块必须使用Python脚本的名称而不是模块来调用。所以你需要给它一个脚本来运行。

如果你是在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\')()')" 
+0

我在Windows上,但你的答案也适用,我尝试了一个相对路径,它的工作原理。你的回答让我想到python能够使用'__path__'属性找到模块的位置,因此pdb可以直接找到模块文件。感谢您的回答 – Overdrivr

+0

很高兴帮助。我还添加了一些Windows选项,不确定这些选项是否与您所做的相符。 –

+0

谢谢,那一个班轮正是我正在寻找的 – Overdrivr

相关问题