通过 .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

【问题讨论】:

附注您可以在.ebextensionsfiles 部分安装挂钩脚本,如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 的正确方法是啥

通过ebextensions在aws elastic beanstalk中用nginx替换apache

您可以通过 .ebextensions 文件配置 Elastic Beanstalk 负载平衡 SSL 证书吗?