当前位置: 首页 > 面试题库 >

Pip Requirements.txt --global-option导致与其他软件包的安装错误。“选项未被识别”

上官斌
2023-03-14
问题内容

我在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的来源(我认为不应这样做):
如何在pip冻结产生的需求文件中维护pip安装选项?
https://github.com/pypa/pip/blob/develop/docs/reference/pip_install.rst#id28


问题答案:

您的问题来自这样一个事实,即带有EB的EC2上的PIP版本已经很旧,并且无法理解您的选择。

  1. 使用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"
...
  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

  1. 将更改推送到存储库并重建。由于执行是从外部作用域控制的,并且从旧版本的PIP开始,因此您可能会出错。执行的入口点在EC2实例上的应用程序外部,因此我不确定如何带来在第一次部署时就可以在钩子范围内使用的解决方案…但是您要做的就是再次部署,并且它将使用适当的版本的PIP,因此从现在开始可以使用,直到下一次重建…


 类似资料:
  • 问题内容: 我有以下目录结构: 我想为some_project安装依赖项。我知道我可以CD进入some_project然后运行npm install 但是我想知道是否可以不更改目录?就像是 问题答案: 您可以将变体与选项一起使用。在您的方案中,文件夹和前缀将相同:

  • 我正在尝试为我的移动应用程序安装一个共享按钮插件,但当我键入“npm I--save dev Share Button”时,我会收到一长串GYP错误代码。我只是一名学生,对编程非常陌生,所以如果我的问题的答案看起来很简单,我很抱歉。我试着更新Nodejs、GYP和NPM,但到目前为止没有成功。以下是我遇到的错误: C:\Users\Marketing1\Documents\App\Soundboa

  • 什么是红帽订阅管理 红帽订阅订阅管理提供了向服务器/计算机授权产品订阅的工具,让管理员能够获取软件包的更新,跟踪系统所用支持合同和订阅的相关信息。PackageKit 和 yum 等标准工具可以用来获取红帽提供的软件包和更新等内容。可以通过红帽订阅管理工具执行下列四项基本任务: 注册 - 注册系统,将该系统与某一红帽帐户关联。这可以让订阅管理器唯一地清查该系统。不再使用某一系统时,可以取消注册。

  • 当使用sequalize db:migrate命令时,我得到了以下错误。查看之前关于类似问题的一些评论,人们说这是一个依赖性问题,但每当我运行 npm安装mysql2 或 npm安装-g mysql2 我也犯了同样的错误。 这是我的package.json就像你们中的一些人所要求的。