在 Amazon Elastic Beanstalk 上安装 Anaconda

Posted

技术标签:

【中文标题】在 Amazon Elastic Beanstalk 上安装 Anaconda【英文标题】:Installing Anaconda on Amazon Elastic Beanstalk 【发布时间】:2014-09-15 06:47:04 【问题描述】:

我已将部署命令添加到我的 Elastic Beanstalk 部署中,该部署下载 Anaconda 安装程序,并将其安装到 /anaconda。一切顺利,但我似乎无法按照 Anaconda 安装页面的建议正确修改实例的 PATH 以包含 /anaconda/bin。如果我通过 SSH 连接到一个实例并手动添加它,一切正常。但这显然不是正确的方法,因为机器会被 EB 自动添加。

所以我的问题是:如何在我的脚本中使用 Anaconda?

更多细节:

我尝试了所有我能想到的方法将/anaconda/bin 添加到系统路径中。部署前/后部署脚本、自定义环境变量等。似乎无论我做什么,修改都不会持续到应用程序运行时。 我尝试通过将 Anaconda 添加到 sys.path 来包含它:sys.path.append('/anaconda/bin') 无济于事。使用以下内容:sys.path.append('/anaconda/lib/python2.7/site-packages') 允许我导入一些包,但在import pandas 上失败。奇怪的是,如果我 SSH 进入实例并使用他们的 python (/opt/python/run/venv/bin/python2.7) 运行应用程序,它运行良好。我要疯了吗?为什么在通过 EB 运行时在特定导入语句上失败?

【问题讨论】:

【参考方案1】:

找到答案:import pandas 失败,因为matplotlib 未能初始化,因为它试图获取当前用户的主目录。由于应用程序是通过 WSGI 运行的,因此 HOME 变量设置为 /home/wsgi但此目录不存在。因此,通过部署命令创建此目录解决了此问题。


我在 Elastic Beanstalk 上使用 Anaconda 的总体设置如下:.ebextensions/options.config 包含:

命令: 00_download_conda: 命令:'wget http://repo.continuum.io/archive/Anaconda-2.0.1-Linux-x86_64.sh' 测试一下 ! -d /anaconda 01_install_conda: 命令:'bash Anaconda-2.0.1-Linux-x86_64.sh -b -f -p /anaconda' 测试一下 ! -d /anaconda 02_create_home: 命令:'mkdir -p /home/wsgi'

00_download_conda 只是下载 Anaconda。最新 Anaconda 版本下载链接见here。 test 命令是 EB 让您仅在测试失败时执行命令的方式...只是在开发时防止重复下载。01_install_conda 使用选项 -b -f -p /anaconda 安装 Anaconda,允许将其安装在指定目录,无需用户输入,如果已安装则跳过安装。02_create_home 创建缺少的目录。

最后 - 在你的 python 应用程序中使用 Anaconda:sys.path.append('/anaconda/lib/python2.7/site-packages') 干杯!

【讨论】:

为了使其正常工作,我必须将mkdir /home/wsgi 替换为mkdir -p /home/wsgi(以防您第二次部署并且/home/wsgi 已经存在)并且我还在@987654337 部分添加了test: test ! -d /anaconda @ 因为似乎 -f 选项不起作用。但除此之外做得很好,谢谢! 太棒了,真的很高兴它对你有用!我编辑了我的答案以包含您的更改。谢谢!

以上是关于在 Amazon Elastic Beanstalk 上安装 Anaconda的主要内容,如果未能解决你的问题,请参考以下文章

Django 在 Amazon Elastic Beanstalk 上的迁移命令被杀死

Amazon Elastic Beanstalk 在运行任何命令时不断询问凭据

在 Amazon Elastic Beanstalk 上安装 Anaconda

Elastic Beanstalk 是不是支持 Amazon 的 Aurora DB?

在 Amazon Elastic Compute Cloud (Amazon EC2) 上托管 twitter 流 api 的优缺点是啥

Amazon Elastic Beanstalk:多个应用程序可以共享一个 Amazon RDS 数据库实例吗?