如何调试pip install <package name =“”>

时间:2019-04-20 03:23:35

标签: debugging pip install setup.py pdb

如果我想调试通过“ 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安装时,我要调试的行为也适用。

2 个答案:

答案 0 :(得分:0)

哦!刚刚找到了解决方案,这很容易。什么是点子?这是一个普通的python文件,我认为它一定会通过python运行,并且在引擎盖下可以生成

python pip install ...

所以,首先我们需要知道pip在哪里

which pip

/Users/me/PycharmProjects/etlscripts/venv/bin/pip

因此,我们可以转到Pycharm,创建

之类的配置

Pycharm run config

那么您就可以捕获异常。干杯。

答案 1 :(得分:0)

Pip 是一个 Python 程序。您可以使用 cat $(which pip) 查看它的内容。然后,您可以将其复制到项目目录中的新文件中。例如,这对我来说是这样的:

文件mypip.py

#!/home/jozo/d/unfurl/venv/bin/python
# -*- 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 的回答中所述。

作为参考,这就是它在我的 Pycharm 中的样子 enter image description here