Python 可以让pip打印它正在使用的配置吗?

Python 可以让pip打印它正在使用的配置吗?,python,pip,Python,Pip,有没有办法让pip打印它将尝试使用的配置?出于调试目的,最好知道: config.ini文件位于正确的位置,pip正在查找它们 配置设置的优先级是按照用户期望的方式处理的 适用于10.0.x及更高版本 有一个新的pip config命令,用于列出当前的配置值 pip config list (正如@wmaddox在注释中指出的)以获取pip查找配置文件的位置列表 pip config list -v 10.0.x之前的版本 您可以启动python控制台并执行以下操作。(如果你有virtaul

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

  • config.ini文件位于正确的位置,pip正在查找它们
  • 配置设置的优先级是按照用户期望的方式处理的

  • 适用于10.0.x及更高版本

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

    pip config list
    
    (正如@wmaddox在注释中指出的)以获取pip查找配置文件的位置列表

    pip config list -v
    
    10.0.x之前的版本

    您可以启动python控制台并执行以下操作。(如果你有virtaulenv,别忘了先激活它)

    是一个函数,用于创建pip用于从命令行(
    optparse
    )读取参数并加载配置(
    configparser
    )的函数

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

    parser.config
    是的实例,因此
    get\u config\u文件中生成的所有文件名都将传递给
    

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


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

  • pip可执行文件的配置是什么
  • 关于pip支持的配置,有大量文档,请参见:

  • pip在配置并随后构建Python模块所需的代码时使用的配置是什么
  • 这是由正在安装的软件包指定的。包维护人员负责生成配置脚本。例如,Numpy有一个配置类(),用于配置Cython构建

  • 当前与pip一起安装的模块有哪些,以便我可以复制特定的环境配置
  • 这很简单,
    pip freeze>requirements.txt
    。这将生成当前安装的所有pip模块及其确切版本的文件。然后,您可以执行
    pip install-r requirements.txt
    ,在另一台机器上复制该精确的环境配置


    我希望这有帮助。

    您可以在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程序。

    你是说pip.conf文件吗?是的,相当于pip.conf文件的Windows是一个名为“pip”的父目录中的config.ini文件。我认为这很有用,但似乎只是打印它可能使用的文件。例如,如果我在Mac上运行这个,我会得到
    ['/Library/Application Support/pip/pip.conf','/Users/myuser/.pip/pip.conf','/Users/myuser/Library/Application Support/pip/pip.conf']
    ,但这些文件实际上都不存在。是否有一些日志记录或任何东西会让pip打印出它试图读取的文件,以及它是否成功地这样做?@FGreg我扩展了我的答案。我有一些问题要问你。您试图如何传递您的
    config.ini
    get\u config\u files
    reads
    PIP\u config\u FILE
    环境变量,您是否正确设置了它?你在使用virtualenv吗?我正在试图弄清楚它是否在使用pip.conf、pip.ini、conf.ini等等。。。如果是,它位于哪里。你的更新似乎涵盖了我所寻找的;谢谢。通过上面的例子,这可以很容易地转换成脚本。可以运行它来显示您想要的信息。值得注意的是
    pip search
    似乎总是使用PyPi.org,即使您的pip.conf已正确配置为使用私有镜像。今天早些时候,为了调试一个问题,我在这个问题上浪费了令人尴尬的长时间。
    >>> 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']