是否有可能获得pip来打印它正在使用的配置?

时间:2016-04-12 09:45:13

标签: python pip

有没有办法让pip打印它会尝试使用的配置?出于调试目的,了解它是非常好的:

  1. config.ini文件位于正确的位置,而pip正在查找它们。
  2. 配置设置的优先顺序将按照人们对docs
  3. 的预期方式进行处理

3 个答案:

答案 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.configRawConfigParser的实例,因此get_config_files中生成的所有文件名都会传递给parser.config.read

  

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

答案 1 :(得分:0)

从我的看法来看,你的问题可以用三种方式解释:

  1. pip可执行文件的配置是什么?
  2. 有关pip支持的配置的大量文档,请参阅此处:https://pip.pypa.io/en/stable/user_guide/#configuration

    1. pip在配置和随后构建Python模块所需的代码时使用的配置是什么?
    2. 这是由正在安装的软件包指定的。包维护者负责生成配置脚本。例如,Numpy有一个Configuration类(https://github.com/numpy/numpy/blob/master/numpy/distutils/misc_util.py),用于配置他们的Cython构建。

      1. 使用pip安装的当前模块是什么,以便我可以重现特定的环境配置?
      2. 这很简单,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程序。