是否可以让 pip 打印它正在使用的配置?

新手上路,请多包涵

有没有办法让 pip 打印它将尝试使用的配置?出于调试目的,很高兴知道:

  1. config.ini 文件位于正确的位置并且 pip 正在找到它们。
  2. 配置设置的优先级按照 文档 期望的方式处理

原文由 Alexander 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 837
2 个回答

对于 10.0.x 及更高版本

有新的 pip config 命令,用于列出当前配置值

pip config list

(正如@wmaddox 在评论中指出的那样)获取 pip 查找配置文件的位置的列表

pip config list -v

10.0.x 之前

你可以启动 python 控制台并执行。 (如果你有 virtaulenv 不要忘记先激活它)

 from pip import create_main_parser
parser = create_main_parser()
# print all config files that it will try to read
print(parser.files)
# reads parser files that are actually found and prints their names
print(parser.config.read(parser.files))

create_main_parser is function that creates parser which pip uses to read params from command line( optparse ) and loading configs( configparser )

可能的配置文件名在 get_config_files 中生成。包括 PIP_CONFIG_FILE 环境变量(如果已设置)。

parser.config get_config_files RawConfigParser parser.config.read

尝试读取和解析文件名列表,返回成功解析的文件名列表。如果 filenames 是字符串,则将其视为单个文件名。如果无法打开以 filenames 命名的文件,则该文件将被忽略。这是为了让您可以指定一个潜在配置文件位置列表(例如,当前目录、用户的主目录和一些系统范围的目录),并且列表中的所有现有配置文件都将被读取。如果命名文件都不存在,则 ConfigParser 实例将包含一个空数据集。需要从文件加载初始值的应用程序应在为任何可选文件调用 read() 之前使用 read_file() 加载所需的一个或多个文件:

原文由 Sardorbek Imomaliev 发布,翻译遵循 CC BY-SA 4.0 许可协议

你可以在 pdb 中运行 pip。这是 ipython 中的一个示例:

 >>> import pip
>>> import pdb
>>> pdb.run("pip.main()", globals())
(Pdb) s
--Call--
> /usr/lib/python3.5/site-packages/pip/__init__.py(197)main()
-> def main(args=None):
(Pdb) b /usr/lib/python3.5/site-packages/pip/baseparser.py:146
Breakpoint 1 at /usr/lib/python3.5/site-packages/pip/baseparser.py:146
(Pdb) c
> /usr/lib/python3.5/site-packages/pip/baseparser.py(146)__init__()
-> if self.files:
(Pdb) p self.files
['/etc/xdg/pip/pip.conf', '/etc/pip.conf', '/home/andre/.pip/pip.conf', '/home/andre/.config/pip/pip.conf']

这里唯一的技巧是查找 baseparser 的路径(并知道文件在那里)。如果您还不知道这一点,您可以简单地单步执行程序或阅读源代码。这种类型的探索应该适用于大多数 Python 程序。

原文由 André Laszlo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题