如何将包(例如 libjpeg-dev)自动加载到我的 Elastic Beanstalk 应用程序?

Posted

技术标签:

【中文标题】如何将包(例如 libjpeg-dev)自动加载到我的 Elastic Beanstalk 应用程序?【英文标题】:How do I auto load packages (such as libjpeg-dev) to my Elastic Beanstalk App? 【发布时间】:2014-05-30 19:48:44 【问题描述】:

我有一个运行 Python 的 Auto Scaling Elastic Beanstalk 应用程序,我想在其中使用 PIL。当我这样做时,它说我的 jpeg 解码器丢失了,我需要安装 libjpeg。

所以我在这里遵循 AWS 官方指南中的“配置文件”:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html#customize-containers-format

但我无法让它工作。

如果我正确理解了这些指南,我应该在我的应用程序文件夹中设置一个名为 .ebextensions 的目录。在我的 .ebextensions 中,我应该设置一个 foo.config 文件。就我而言,我将其命名为python.config

我想在这个文件中执行命令。我的 .config 文件的代码是:

packages:
  yum:
    libjpeg-devel: '6b'

我部署了我的应用程序,我可以在我的日志快照中看到它像这样膨胀和创建文件:

-------------------------------------
/var/log/eb-tools.log
-------------------------------------
creating: /opt/python/ondeck/app/.ebextensions/
inflating: /opt/python/ondeck/app/.ebextensions/python.config  
inflating: /opt/python/ondeck/app/application.py  
...

但是,我找不到有关实际执行命令的任何信息。我一直在我的日志中搜索“yum”、“python.config”、“jpeg”、“libjpeg”等等,没有任何相关的痕迹。我重新启动应用程序服务器,但仍然收到相同的消息,说 libjpeg 丢失。

我看到其他人问过类似的问题,关于配置文件不起作用。但我还没有看到任何答案。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,我没有设置全新的 Elastic Beanstalk 应用程序,而是通过 SSH 连接到 EC2 实例并重新安装了 PIL(或 Pillow)。

在 EC2 实例上,我运行了以下命令:

source /opt/python/run/venv/bin/activate
pip uninstall PIL
pip install PIL

现在 PIL 支持 jpeg 编码 =)

【讨论】:

【参考方案2】:

我通过设置一个全新的 Elastic Beanstalk 应用程序并在那里部署完全相同的应用程序来“解决”此问题。然后它成功安装了 libjpeg 包。

我一直无法找到为什么它不能在第一个 Elastic Beanstalk 应用程序上运行的答案。但也许它与第一次安装 PIL 有关,然后它无法安装 libjpeg。

【讨论】:

以上是关于如何将包(例如 libjpeg-dev)自动加载到我的 Elastic Beanstalk 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

将包上传到 testflight 错误 ITMS-90125

如何防止 setuptools 将包安装为 .egg

无法将包加载为 XML,因为包没有有效的 XML 格式

将包添加到类路径时出现包不存在错误

如何查询集成服务目录

将包管理器与 Domino 和节点模块的位置一起使用