Pip Requirements.txt --global-option, вызывающий ошибки установки с другими пакетами. "опция не распознана"

У меня проблемы с параметрами --global-option и --install-option для файла require.txt. Задание параметров для одной библиотеки приводит к сбою установки других библиотек.

Я пытаюсь установить библиотеки Python "grab" и "pycurl". Мне нужно указать, что pycurl должен быть установлен с параметром: "--with-nss". Я могу повторить ошибку в абсолютно чистой виртуальной среде.

В новой виртуальной среде с needs.txt, содержащей:

grab==0.6.25
pycurl==7.43.0 --install-option='--with-nss'

Затем установка с:

pip install -r requirements.txt

Следующие ошибки произойдут.

Installing collected packages: lxml, pycurl, pytils, six, user-agent, weblib, selection, grab
  Running setup.py install for lxml ... done
  Running setup.py install for pycurl ... done
  Running setup.py install for pytils ... error
    Complete output from command /home/ec2-user/test/env/bin/python2.7 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-8GvFzA/pytils/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n
'), __file__, 'exec'))" install --record /tmp/pip-BCG3Wl-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/ec2-user/test/env/include/site/python2.7/pytils --with-nss:
    usage: -c [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
       or: -c --help [cmd1 cmd2 ...]
       or: -c --help-commands
       or: -c cmd --help

    error: option --with-nss not recognized

    ----------------------------------------
Command "/home/ec2-user/test/env/bin/python2.7 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-8GvFzA/pytils/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))"
install --record /tmp/pip-BCG3Wl-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/ec2-user/test/env/include/site/python2.7/pytils --with-nss" failed with error code 1 in /tmp/pip-build-8GvF
zA/pytils/

Моя лучшая догадка в отношении основной причины заключается в том, что параметр "--with-nss" передается всем библиотекам, для которых требуется pycurl, и предотвращает установку. Установка pytils завершается неудачно, хотя установка pycurl работает нормально.

Есть ли способ передать параметры установки только одной библиотеке?

Я настраиваю это на экземпляре Amazon Elastic Beanstalk, поэтому нет никакой возможности вручную запускать каждую строку файла needs.txt - вся установка запускается при запуске приложения.

Источники --global-option и --install-option (который, я думаю, не должен этого делать): как сохранить параметры установки pip в файле требований, созданном pip freeze? https://github.com/pypa/pip/blob/develop/docs/reference/pip_install.rst#id28

1 ответ

Решение

Ваша проблема связана с тем, что версия PIP на EC2 с EB довольно старая и не понимает ваших возможностей.

  1. Обновите pip lib до последней доступной версии с помощью команд EB:

project_dir /.ebextensions / 02-python.config:

...
commands:
  01_upgrade_pip_for_venv:
    command: "/opt/python/run/venv/bin/pip install --upgrade pip"
...
  1. Теперь вы можете оставить параметры в require.txt, так как новая версия pip сможет работать с ним.

project_dir / requirements.txt:

...
pycurl==7.43.0 --global-option="--with-nss"
...
  1. (Это может быть избыточно) Установите опцию в пользовательских интерфейсах консоли EB или через eb CLI с помощью команды:

    eb setenv PYCURL_SSL_LIBRARY = nss

  2. Перенесите изменения в хранилище и перестройте. У вас могут быть ошибки, так как выполнение контролируется из внешней области и начинается со старой версии PIP. Точка входа в систему находится за пределами приложения на экземпляре EC2, поэтому я не уверен, как вывести решение, которое работало бы из области хуков при первом развертывании... Но все, что вам нужно сделать, это развернуть снова, и он будет использовать правильное версия PIP, так что теперь она будет работать, до следующей перестройки...

Другие вопросы по тегам