在Amazon Elastic Beanstalk上安装Anaconda

Jas*_*son 4 python amazon-ec2 amazon-web-services anaconda amazon-elastic-beanstalk

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

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

更多细节:

  • 我已经尝试过/anaconda/bin以我能想到的所有方式添加到系统PATH.部署之前/之后的脚本,自定义环境变量等.无论我做什么,似乎在运行应用程序时修改都不会持续存在.
  • 我试图通过将它添加到sys.path中来包含Anaconda: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运行时,它在特定的import语句中失败?

Jas*_*son 10

找到答案: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:
    command:'bash Anaconda-2.0.1-Linux-x86_64.sh -b -f -p/anaconda'test
    :test!-d/anaconda
  02_create_home:
    command:'mkdir -p/home/wsgi'

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

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