Возможно ли получить команду печати печатать конфигурацию, которую она использует?
Есть ли способ получить пип для печати конфигурации, которую он попытается использовать? Для целей отладки было бы очень приятно знать, что:
- Файлы config.ini находятся в правильном месте, и pip находит их.
- Приоритет настроек конфигурации обрабатывается так, как можно было бы ожидать от docs
Ответы
Ответ 1
Обновлено (ответ)
Вы можете запустить консоль 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
) и загрузки конфигураций (configparser
)
Возможные имена файлов для конфигураций создаются в get_config_files
. Включая переменную среды PIP_CONFIG_FILE
, если она установлена.
parser.config
является экземпляром RawConfigParser
, поэтому все сгенерированные имена файлов в get_config_files
передаются в parser.config.read
.
Попытка прочитать и разобрать список имен файлов, возвращая список имен файлов, которые были успешно проанализированы. Если имена файлов - это строка, это рассматривается как одно имя файла. Если файл с именем в именах файлов не открывается, этот файл будет проигнорирован. Он разработан таким образом, что вы можете указать список возможных мест расположения конфигурационных файлов (например, текущий каталог, домашний каталог пользователей и некоторый общесистемный каталог), и все существующие файлы конфигурации в списке будут прочитаны. Если ни один из названных файлов не существует, экземпляр ConfigParser будет содержать пустой набор данных. Приложение, которое требует загрузки начальных значений из файла, должно загружать требуемый файл или файлы с помощью read_file() перед вызовом read() для любых необязательных файлов:
Ответ 2
Из того, что я вижу, ваш вопрос можно интерпретировать тремя способами:
- Какова конфигурация исполняемого файла pip?
Существует довольно обширная документация для конфигураций, поддерживаемых pip, см. здесь: https://pip.pypa.io/en/stable/user_guide/#configuration
- Какова конфигурация, которую использует pip при настройке и последующем построении кода, требуемого модулем Python?
Это определяется пакетом, который устанавливается. Составитель пакета отвечает за создание конфигурации script. Например, у Numpy есть класс конфигурации (https://github.com/numpy/numpy/blob/master/numpy/distutils/misc_util.py), который они используют для настройки сборки Cython.
- Каковы текущие модули, установленные с помощью pip, поэтому я могу воспроизвести определенную конфигурацию среды?
Это легко, pip freeze > requirements.txt
. Это создаст файл всех установленных модулей модулей вместе с их точными версиями. Затем вы можете сделать pip install -r requirements.txt
, чтобы воспроизвести эту точную конфигурацию среды на другом компьютере.
Надеюсь, это поможет.
Ответ 3
Вы можете запустить pip в pdb. Вот пример внутри 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']
Единственный трюк здесь - поиск пути к базовому парсеру (и знание того, что файлы там). Если вы этого еще не знаете, вы можете просто пройти через программу или прочитать источник. Этот тип исследования должен работать для большинства программ Python.