通过 .ebextensions 升级 pip
Posted
技术标签:
【中文标题】通过 .ebextensions 升级 pip【英文标题】:Upgrade pip via .ebextensions 【发布时间】:2020-01-07 20:06:28 【问题描述】:我正在尝试升级 pip 以可能解决 dist-info directory not found
错误,但我的部署似乎完全忽略了任何尝试。是否有可能在任何 .ebextensions 脚本之前安装要求,这就是为什么我没有看到任何进展?如果是这样,我可以在什么时候升级 pip?
我知道我可以通过 SSH 进入,但我不想在每次部署时都这样做。
01_upgrade_pip.config
commands:
01_upgrade_pip:
command: /opt/python/run/venv/bin/pip install --upgrade pip
ignoreErrors: false
这里的一切是否正确,或者我一直在关注的资源已被弃用或其他什么?
我已经尝试在我的 packages.config 中包含该命令,并希望能够先进行升级,但仍然没有任何迹象表明它已被确认。
packages:
yum:
git: []
commands:
01_upgrade_pip:
command: /opt/python/run/venv/bin/pip install --upgrade pip
ignoreErrors: false
除非有人提出具体要求,否则我暂时不会包含日志。目前所有相关的都是相同的dist-info directory not found
错误以及当 19 可用时我正在使用 pip 版本 9 的警报(确认没有升级发生)。
下面的答案更新 下面提到的解决方案是使用 preinit 脚本。
在 /opt/elasticbeanstalk/hooks/preinit/08upgradepip.sh:
python3 -m pip install --upgrade pip
【问题讨论】:
附注您可以在.ebextensions
的files
部分安装挂钩脚本,如blog.eq8.eu/article/aws-elasticbeanstalk-hooks.html 中所述
【参考方案1】:
您是否尝试使用 preinit
挂钩?
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/custom-platform-hooks.html
启动实例时,Elastic Beanstalk 会按此顺序运行 preinit、appdeploy 和 postinit。在对正在运行的实例进行后续部署时,Elastic Beanstalk 会运行 appdeploy 挂钩。 configdeploy 挂钩在用户更新实例软件配置设置时运行。 restartappserver 挂钩仅在用户启动应用程序服务器重新启动时运行。
根据文档:
将您希望钩子触发的脚本放在 /opt/elasticbeanstalk/hooks/ 文件夹的子文件夹之一中。
【讨论】:
你能给我举个例子吗?我确实读过,但我对执行感到困惑。我尝试使用files
,但每次都失败。我需要一个单独的 .config 文件来承担正确的顺序吗?
不,我手头没有示例。您能否更新您的问题,添加您使用files
尝试过的内容?另一个对我有用的选项是使用 Docker 而不是 python 选项。它非常易于使用,并且您可以更好地控制您安装的软件包。
我确实在这之后不久就去了 Docker 路线。我确实弄清楚了preinit,但是,它仍然失败了。我会更新我的问题,您可以将其添加到您的答案中以供未来的读者阅读。以上是关于通过 .ebextensions 升级 pip的主要内容,如果未能解决你的问题,请参考以下文章
尝试通过弹性 beantalk 运行救援时忽略 .ebextensions 文件
无法通过 .ebextensions 文件更改 AWS 中的 tomcat 配置
如何通过 ebextensions 配置文件添加 nginx 缓存控制标头?
通过 Maven 为 Spring Boot 应用程序创建 AWS Beanstalk 的 .ebextensions 的正确方法是啥