有没有办法让pip打印它会尝试使用的配置?出于调试目的,了解它是非常好的:
答案 0 :(得分:34)
适用于10.0.x及更高版本
有新的pip config
命令,用于列出当前配置值
pip config list
(正如@wmaddox在评论中指出的那样)获取pip查找配置文件的位置列表
pip config list -v
Pre 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
是创建parser
的函数,其中pip用于从命令行(optparse
)读取params并加载配置(configparser
)
配置的可能文件名在get_config_files
中生成。如果设置了PIP_CONFIG_FILE
环境变量,则包含它。
parser.config
是RawConfigParser
的实例,因此get_config_files
中生成的所有文件名都会传递给parser.config.read
尝试读取并解析文件名列表,返回已成功解析的文件名列表。如果文件名是字符串,则将其视为单个文件名。如果无法打开文件名中指定的文件,则将忽略该文件。其设计使您可以指定潜在配置文件位置的列表(例如,当前目录,用户的主目录和某些系统范围的目录),并且将读取列表中的所有现有配置文件。如果不存在任何命名文件,则ConfigParser实例将包含空数据集。需要从文件加载初始值的应用程序应该在调用任何可选文件的read()之前使用read_file()加载所需的一个或多个文件:
答案 1 :(得分:0)
从我的看法来看,你的问题可以用三种方式解释:
有关pip支持的配置的大量文档,请参阅此处:https://pip.pypa.io/en/stable/user_guide/#configuration
这是由正在安装的软件包指定的。包维护者负责生成配置脚本。例如,Numpy有一个Configuration类(https://github.com/numpy/numpy/blob/master/numpy/distutils/misc_util.py),用于配置他们的Cython构建。
这很简单,pip freeze > requirements.txt
。这将生成所有当前安装的pip模块及其确切版本的文件。然后,您可以pip install -r requirements.txt
在另一台计算机上重现该确切的环境配置。
我希望这会有所帮助。
答案 2 :(得分: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程序。