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.

  • pip install pydot повышает значение SyntaxError
  • Перечисление зависимостей пакета с помощью pip
  • Не удается получить scikit-learn, установленный на OS X
  • Сколько элементов было очищено для start_url
  • Как сделать редактируемую установку пакета Python из vcs в конкретный каталог с помощью pip?
  • Проблема с easy_install-2.7
  • Как указать порядок установки для питона python?
  • Запретить установку пакета на старых версиях Python
  • 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.

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