我可以更新亚马逊旧版本的 pip 和 setuptools 吗?

Posted

技术标签:

【中文标题】我可以更新亚马逊旧版本的 pip 和 setuptools 吗?【英文标题】:Can I update Amazon's old versions of pip and setuptools? 【发布时间】:2015-04-06 19:11:46 【问题描述】:

我可以更新或删除随 AWS Elastic Beanstalk 提供的 pip 和 setuptools 吗?

我的 AWS Elastic Beanstalk Python 环境(在运行我的应用程序的 2.7 虚拟环境中,ami-d14608e1;在/opt/python/run/venv/lib/python2.7/site-packages 中)提供的 pip 和 setuptools 版本非常旧:据报告

pip list --outdated

他们是

setuptools (Current: 2.2 Latest: 12.0.5)
pip (Current: 1.5.4 Latest: 6.0.7)

我可以更新这些(例如,通过在我的 requirements.txt 中列出它们)还是这些特定版本是 EB 的 Python 和部署流程正常工作所期望或需要的?

【问题讨论】:

【参考方案1】:

pip 为例,默认的 AWS 环境通常提供旧版本。目前它是我使用的机器上的6.1.1,而pip 在每次调用时重复9.0.1 可用。

依赖项有时需要最新版本的pip。使其可用的一种方法是依赖 pip 本身,因为 AWS 提供的 yum 源升级速度较慢(由于会导致...的巨大影响)。

不同的 AWS 服务有不同的解决方案。问题是关于 Beanstalk。假设基于AWS提供的eb部署,可以在目标容器中执行命令:

创建一个.ebextensions/upgrade_pip.config 文件。 插入要执行的命令。

要升级pip,可以使用这样的命令:

commands:
  pip_upgrade:
    command: /opt/python/run/venv/bin/pip install --upgrade pip
    ignoreErrors: false

请注意,.ebextensions/upgrade_pip.config 的文件名定义了执行顺序。如果它需要比.ebextensions 中的任何其他脚本更早地运行,则需要像01_upgrade... 这样的前缀。

【讨论】:

这是否仍然有效,因为我的部署似乎完全忽略了它?可能已经过时了,还是应该这样? @CodeSpent 我刚刚尝试过,它仍然有效。 Here 是代码和服务器日志的 sn-p。 是的,我应该告诉 EBcli 什么才能让 ebextension 运行? @jwillis0720 如果您遵循 AWS 设置的模式(.ebextensions 下的文件),则应在执行命令时选择它们。有关更多信息,documentation 提供了示例。 我还告诉 pip 首先在需求文件中更新自己【参考方案2】:

尝试添加一个 ebextension 文件,在运行之前升级 pip pip install -r requirements.txt

例如:

004_prehook.config

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/02a_upgrade_pip.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      source /opt/python/run/venv/bin/activate
      python3 -m pip install --upgrade pip

【讨论】:

嘿Yarh,这对我不起作用...我怎么能理解出了什么问题?我是 14 天前开始使用 AWS 的,我从没想过 AWS 的文档会这么差,无法做简单的事情……真是令人沮丧

以上是关于我可以更新亚马逊旧版本的 pip 和 setuptools 吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥用pycharm升级了pip,在命令框里面的pip还是旧版本

利用pip批量更新python库

Pip安装旧版本的包[重复]

pip --upgrade批量更新过期的python库

为什么你需要升级 pip

更新CMake3.16+的方法