我可以更新亚马逊旧版本的 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 吗?的主要内容,如果未能解决你的问题,请参考以下文章