Pip Requirements.txt --global-option 导致其他软件包安装错误。 “选项无法识别”
Posted
技术标签:
【中文标题】Pip Requirements.txt --global-option 导致其他软件包安装错误。 “选项无法识别”【英文标题】:Pip Requirements.txt --global-option causing installation errors with other packages. "option not recognized" 【发布时间】:2016-07-20 06:26:46 【问题描述】:我在使用 requirements.txt 文件的 --global-option 和 --install-option 设置时遇到了问题。为一个库指定选项会导致其他库安装失败。
我正在尝试安装 Python 库“grab”和“pycurl”。我需要指定使用选项安装 pycurl:“--with-nss”。我可以在完全干净的虚拟环境中复制错误。
在带有 requirements.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 的库,并阻止安装。即使 pycurl 安装工作正常,pytils 安装也会失败。
无论如何只能将安装选项传递给一个库吗?
我在 Amazon Elastic Beanstalk 实例上进行设置,因此无法手动运行 requirements.txt 文件的每一行 - 整个安装在应用程序启动时运行。
--global-option 和 --install-option 的来源(我认为不应该这样做): How to maintain pip install options in requirements file made by pip freeze? https://github.com/pypa/pip/blob/develop/docs/reference/pip_install.rst#id28
【问题讨论】:
【参考方案1】:您的问题来自这样一个事实,即带有 EB 的 EC2 上的 PIP 版本已经很旧并且不理解您的选择。
-
使用 EB 命令将 pip lib 更新到最新可用版本:
project_dir/.ebextensions/02-python.config:
...
commands:
01_upgrade_pip_for_venv:
command: "/opt/python/run/venv/bin/pip install --upgrade pip"
...
-
现在您可以在 requirements.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,所以它会从现在开始工作,直到下一次重建......
【讨论】:
对我来说,全局选项在需求文件中根本不起作用,直到我意识到我的问题无论如何都不需要它(类似于上面):***.com/questions/51019622/…以上是关于Pip Requirements.txt --global-option 导致其他软件包安装错误。 “选项无法识别”的主要内容,如果未能解决你的问题,请参考以下文章
pip install –r ./requirements.txt 报错 改成 pip install -r requirements.txt 成功
在 requirements.txt 中强制重新安装 pip
pip install -r requirements.txt [Errno 2] 没有这样的文件或目录:'requirements.txt'