2016-04-12 22 views
18

有沒有什麼辦法讓pip打印它將嘗試使用的配置?出於調試的目的,它將非常高興地知道:是否可以讓pip打印正在使用的配置?

  1. config.ini文件位於正確的位置,並且pip正在查找它們。
  2. 的配置設置的優先級在方式處理人會期望從docs
+0

你是指pip.conf文件嗎? –

+1

是的,等同於pip.conf文件的Windows是名爲'pip'的父目錄中的config.ini文件。 – Alexander

回答

17

更新(應答評論)

可以啓動蟒蛇控制檯和做。 (如果您有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這點子用來讀取命令行(optparse)PARAMS和裝載CONFIGS(configparser

可能在get_config_files中生成配置的文件名。如果設置了PIP_CONFIG_FILE環境變量。

parser.configRawConfigParser所以在get_config_files所有生成的文件名傳遞給parser.config.read 實例。

嘗試讀取和解析文件名列表,返回已成功解析的文件名列表。如果文件名是一個字符串,它將被視爲一個文件名。如果以文件名命名的文件無法打開,則該文件將被忽略。這樣做的目的是爲了指定一個潛在的配置文件位置列表(例如,當前目錄,用戶的主目錄以及某個系統範圍的目錄),並且讀取列表中的所有現有配置文件。如果沒有指定的文件存在,那麼ConfigParser實例將包含一個空的數據集。需要從文件加載初始值的應用程序應該在調用read()之前使用read_file()加載所需的一個或多個文件,然後調用任何可選文件的read():

+1

我認爲這很有用,但似乎只是打印它可能使用的文件。例如,如果我在我的Mac上運行這個,我會得到'['/ Library/Application Support/pip/pip.conf','/Users/myuser/.pip/pip.conf','/ Users/myuser/Library /應用程序支持/ pip/pip.conf'],但這些文件都不存在。是否有一些日誌記錄或任​​何可能會打印出正在嘗試讀取的文件以及它是否成功的文件? – FGreg

+0

@FGreg我擴展我的答案。我有一些問題要問你。你如何試圖傳遞你的'config.ini'? 'get_config_files'讀取'PIP_CONFIG_FILE'環境變量,你是否正確設置?你在使用virtualenv嗎? –

+0

我想弄清楚**如果它使用的是pip.conf,pip.ini,conf.ini等等,如果是的話,它在哪裏。您的更新似乎涵蓋了我正在尋找的內容;謝謝。 – FGreg

0

從我怎麼看,你的問題可以解釋有三種方式:

  1. pip可執行文件的配置是什麼?

有用於通過PIP支持的配置的相當大量的文檔,在這裏看到:https://pip.pypa.io/en/stable/user_guide/#configuration

  • 那是什麼點子配置,並隨後建立所需的代碼時所使用的配置由一個Python模塊?
  • 這是由正在安裝的軟件包指定的。包維護者負責生成配置腳本。例如,Numpy有一個配置類(https://github.com/numpy/numpy/blob/master/numpy/distutils/misc_util.py),用於配置他們的Cython版本。

    1. 什麼是與pip安裝的當前模塊,所以我可以重現一個特定的環境配置?

    這很簡單,pip freeze > requirements.txt。這將生成所有當前安裝的pip模塊及其確切版本的文件。然後,您可以執行pip install -r requirements.txt以在另一臺機器上重現該確切的環境配置。

    我希望這會有所幫助。

    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程序。

    相關問題