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 довольно старая и не понимает ваших возможностей.
- Обновите 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"
...
- Теперь вы можете оставить параметры в require.txt, так как новая версия pip сможет работать с ним.
project_dir / requirements.txt:
...
pycurl==7.43.0 --global-option="--with-nss"
...
(Это может быть избыточно) Установите опцию в пользовательских интерфейсах консоли EB или через eb CLI с помощью команды:
eb setenv PYCURL_SSL_LIBRARY = nss
Перенесите изменения в хранилище и перестройте. У вас могут быть ошибки, так как выполнение контролируется из внешней области и начинается со старой версии PIP. Точка входа в систему находится за пределами приложения на экземпляре EC2, поэтому я не уверен, как вывести решение, которое работало бы из области хуков при первом развертывании... Но все, что вам нужно сделать, это развернуть снова, и он будет использовать правильное версия PIP, так что теперь она будет работать, до следующей перестройки...