debugging - 如何调试 pip 安装
问题描述
如果我想调试通过 "pip install 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 添加断点或使用Igor Yudnikov 的回答中提到的 PyCharm。
推荐阅读
- swiftui - SwiftUI 状态变量不渲染视图,除非在视图内部使用(修改器中的诗句)
- nlp - 如何在机器上安装 Medacy。?
- algorithm - 使用 Edmonds-Karp 查找无向图的最大流
- python - 代码错误 - averageOfMarks = sum(sumOfMarks)/5 TypeError: 'int' object is not iterable
- python - 无法在 windows 中导入 tensorflow
- reactjs - 修改故事书的反应子组件状态
- r - 使用 for 循环执行基本加法(尝试理解 R 如何解释 for 循环)
- java - Json Parse 错误 - MismatchedInputException 期望 Spring Boot 中 LocalDate 的数组或字符串
- firebase - 如何在 pub.dev/packages 上查看示例中的所有代码
- ruby-on-rails - has_many :通过 class_name 和 foreign_key 不起作用