如何调试pip安装<软件包名称>

11
如果我想调试通过"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安装后才能应用。


1
来吧,伙计们。在任何其他环境中,软件包管理器只需保存日志文件以便在安装错误后进行详细检查。或者至少提供详细的运行模式。难道你真的需要附加调试器来完成这个任务吗? - aef
1
@aef,是的。 "打印调试"的问题在于它慢、繁琐,与正确的调试相比几乎没有用处。在软件开发中,我们应该关心的是CPU在做什么。相反,我们整整一代人对CPU感到恐惧,更不用说了解它在做什么了。所以我们陷入了这种构建系统构建构建系统以输出构建库的混乱中。这些都不起作用,而且经常出错。太可怕了。我们需要更多的调试器,而不是更少。是的,我知道这是一个温迪餐厅。 - undefined
3个回答

2
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 或者像 Igor Yudnikov 所提到的那样使用 PyCharm 来添加断点。

这是我在 PyCharm 中的截图: enter image description here


0
记住你可以(应该)使用python -m pip来运行pip,这样你就可以执行python -m pdb -m pip install xxx

0
哦!刚刚找到了一个解决方案,它非常简单。pip是什么?它是一个纯Python文件,我认为它以某种方式绑定在Python上运行,并且在系统底层执行类似于...的操作。
python pip install ...

所以,首先我们需要知道pip的位置

which pip

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

所以,我们可以去Pycharm,创建像这样的配置

Pycharm run config

那么你就能够捕获你的异常了。干杯。


对我来说不起作用,因为pip无法再找到它自己的模块了(pip 21.0)。 - RunOrVeith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接