有沒有什麼辦法讓pip打印它將嘗試使用的配置?出於調試的目的,它將非常高興地知道:是否可以讓pip打印正在使用的配置?
- config.ini文件位於正確的位置,並且pip正在查找它們。
- 的配置設置的優先級在方式處理人會期望從docs
有沒有什麼辦法讓pip打印它將嘗試使用的配置?出於調試的目的,它將非常高興地知道:是否可以讓pip打印正在使用的配置?
更新(應答評論)
可以啓動蟒蛇控制檯和做。 (如果您有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.config
是RawConfigParser
所以在get_config_files
所有生成的文件名傳遞給parser.config.read
實例。
嘗試讀取和解析文件名列表,返回已成功解析的文件名列表。如果文件名是一個字符串,它將被視爲一個文件名。如果以文件名命名的文件無法打開,則該文件將被忽略。這樣做的目的是爲了指定一個潛在的配置文件位置列表(例如,當前目錄,用戶的主目錄以及某個系統範圍的目錄),並且讀取列表中的所有現有配置文件。如果沒有指定的文件存在,那麼ConfigParser實例將包含一個空的數據集。需要從文件加載初始值的應用程序應該在調用read()之前使用read_file()加載所需的一個或多個文件,然後調用任何可選文件的read():
我認爲這很有用,但似乎只是打印它可能使用的文件。例如,如果我在我的Mac上運行這個,我會得到'['/ Library/Application Support/pip/pip.conf','/Users/myuser/.pip/pip.conf','/ Users/myuser/Library /應用程序支持/ pip/pip.conf'],但這些文件都不存在。是否有一些日誌記錄或任何可能會打印出正在嘗試讀取的文件以及它是否成功的文件? – FGreg
@FGreg我擴展我的答案。我有一些問題要問你。你如何試圖傳遞你的'config.ini'? 'get_config_files'讀取'PIP_CONFIG_FILE'環境變量,你是否正確設置?你在使用virtualenv嗎? –
我想弄清楚**如果它使用的是pip.conf,pip.ini,conf.ini等等,如果是的話,它在哪裏。您的更新似乎涵蓋了我正在尋找的內容;謝謝。 – FGreg
從我怎麼看,你的問題可以解釋有三種方式:
有用於通過PIP支持的配置的相當大量的文檔,在這裏看到:https://pip.pypa.io/en/stable/user_guide/#configuration
這是由正在安裝的軟件包指定的。包維護者負責生成配置腳本。例如,Numpy有一個配置類(https://github.com/numpy/numpy/blob/master/numpy/distutils/misc_util.py),用於配置他們的Cython版本。
這很簡單,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文件。 – Alexander