python2; pip parse_requirements с ключом -trusted-host и -extra-index-url

я использую

install_requires = [str(ir.req) for ir in parse_requirements("requirements.txt", session=PipSession())] 

с pip install . , Однако, похоже, это не работает с требованиями. Txt выглядит следующим образом:

 --trusted-host blah --extra-index-url blah2 ... 

(поддержка –trusted-host была добавлена ​​в pip8.0.0). Установка из blah терпит неудачу, потому что он жалуется на то, что он не является ненадежным хостом, как будто он никогда не обрабатывал первую строку.

ОДНАКО, pip install -r requirements.txt работает отлично, поэтому эти параметры верны.

Это означает, что что-то parse_requirements не делает. Мой вопрос : как мне исправить или обойти это, используя только pip install . ? Я мог бы сделать что-то ужасное, как:

 os.system(pip install -r requirements.txt) setup(... 

в файле setup.py.

Неявное совпадение требований. Txt и setup.py сбивает меня с толку. Ничто в настройке не называет require.txt, если вы явно не разбираете require.txt самостоятельно, но requirements.txt – это очень стандартное соглашение на python.

EDIT: Мы используем инструменты (Cloudify, а иногда и шеф-повар), которые выполняют pip install . , Мы не можем это изменить. Я должен заставить это работать как пакет pippable, с URL-адресами –trusted-host и -extra-index без использования pip.conf. В настоящее время мы делаем трюк os.system.

2 Solutions collect form web for “python2; pip parse_requirements с ключом -trusted-host и -extra-index-url”

Было много написано об использовании setup.py vrs. requirements.txt. Setup.py предназначен для абстрактных требований. Требования.txt – для конкретных требований. Другими словами, они служат различным целям. В то время как требования.txt для среды, setup.py для пакета. Таким образом, нет смысла для setup.py читать из требования. Txt так же, как это не имеет смысла для пакета deb для чтения из поваренной книги повара. Аннотация vrs. Требования к бетону

Часто причина, по которой люди это делают, заключается в том, что они хотят поддерживать людей, устанавливающих свой пакет с помощью pip install -r requirements.txt из проверки, без необходимости перечислять свои зависимости дважды. Это разумная вещь, чтобы хотеть, поэтому формат файла требований имеет конструкцию, которая его включает, просто создайте файл requirements.txt, содержащий «.». или "-e". и pip автоматически установит проект и все его зависимости.

EDIT: Поскольку pip не является библиотекой, использование самой открытой части программы является самым безопасным (на мой взгляд). Альтернативой os.system является

 import pip pip.main(['install','-r','requirements.txt']) 

Этот ответ от goCards совершенно правдоподобен , и вам, вероятно, следует импортировать pip из вашего setup.py, если нет возможности pip install . , Но я хотел бы объяснить, что на самом деле происходит здесь. Вот что вам нужно знать:

  1. install_requires – это опция, поддерживаемая только setuptools, сторонним пакетом, который улучшает distutils (стандартный инструмент, используемый в файлах setup.py и распространяемый с Python).
  2. По дизайну setuptools принимает только фактические требования в install_requires , поэтому такие параметры, как --trusted-host не могут быть отправлены в install_requires .
  3. Вот почему вы используете parse_requirements("requirements.txt", session=PipSession()) . Эта функция дает только пакеты. Линии параметров, такие как --trusted-host bla , не возвращаются, а отправляются в PackageFinder если вы дали parse_requirements . Но вы не хотите, чтобы эти параметры возвращались, потому что setuptools не знали, что с ними делать!

Короче говоря, если вы хотите использовать опции pip, вам нужно использовать pip.

Python - лучший язык программирования в мире.