在Amazon Elastic Beanstalk上安装Anaconda

5 投票
1 回答
3543 浏览
提问于 2025-04-18 14:31

我在我的Elastic Beanstalk部署中添加了部署命令,这些命令会下载Anaconda安装程序,并把它安装到/anaconda目录下。一切都很顺利,但我似乎无法正确修改我的实例的PATH,以便包含/anaconda/bin,就像Anaconda安装页面建议的那样。如果我通过SSH登录到实例并手动添加它,一切都能正常工作。但这显然不是正确的方法,因为机器会被EB自动添加。

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

再补充一些细节:

  • 我尝试过用各种方法将/anaconda/bin添加到系统的PATH中,比如在部署前后脚本中、设置自定义环境变量等等。似乎无论我怎么做,这些修改在应用程序运行时都不会保留。
  • 我还尝试通过将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 个回答

12

找到了解决办法:import pandas 失败是因为 matplotlib 初始化失败,而它在尝试获取当前用户的主目录。由于这个应用是通过 WSGI 运行的,HOME 变量被设置为 /home/wsgi 但这个目录并不存在。所以,通过部署命令创建这个目录就解决了这个问题。


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

commands:
  00_download_conda:
    command: 'wget http://repo.continuum.io/archive/Anaconda-2.0.1-Linux-x86_64.sh'
    test: test ! -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 命令是 Elastic Beanstalk 的一种方式,只有在测试失败时才执行命令……这只是为了在开发时防止重复下载。
01_install_conda 用来安装 Anaconda,选项 -b -f -p /anaconda 让它可以安装到指定目录,不需要用户输入,并且如果已经安装过就跳过安装。
02_create_home 用来创建缺失的目录。

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

撰写回答