如果我想调试通过“pip install packagename”安装的包 packagename 的 setup.py 文件,有没有办法做到这一点?我尝试下载源代码,在 setup.py 中添加 set_trace() 并运行:
pip install .
但是,当我收到 pdb() 提示时,安装失败并出现错误:
processing /Users/skauser/python-ibmdb/IBM_DB/ibm_db
Complete output from command python setup.py egg_info:
> /private/var/folders/b6/pmddncpn77550p8_g9kkx9f40000gp/T/pip-req-build-_fg8s5a2/setup.py(31)<module>()
-> machine_bits = 8 * struct.calcsize("P")
(Pdb)
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/private/var/folders/b6/pmddncpn77550p8_g9kkx9f40000gp/T/pip-req-build-_fg8s5a2/setup.py", line 31, in <module>
machine_bits = 8 * struct.calcsize("P")
File "/private/var/folders/b6/pmddncpn77550p8_g9kkx9f40000gp/T/pip-req-build-_fg8s5a2/setup.py", line 31, in <module>
machine_bits = 8 * struct.calcsize("P")
File "/Library/anaconda3/lib/python3.7/bdb.py", line 88, in trace_dispatch
return self.dispatch_line(frame)
File "/Library/anaconda3/lib/python3.7/bdb.py", line 113, in dispatch_line
if self.quitting: raise BdbQuit
bdb.BdbQuit
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/b6/pmddncpn77550p8_g9kkx9f40000gp/T/pip-req-build-_fg8s5a2/
虽然我可以通过 python setup.py build 调试源代码,但我想要调试的行为在通过 pip 安装时适用。
Pip 是一个Python 程序。您可以通过
cat $(which pip)
看到它的内容。然后您可以将其复制到项目目录中的新文件中。例如,这对我来说是这样的:
文件
mypip.py
:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
然后您可以使用 pdb 添加断点或使用 PyCharm,如 Igor Yudnikov 的答案中所述。
记住你可以(应该)运行 pip 作为
python -m pip
这样你就可以做 python -m pdb -m pip install xxx