我已将部署命令添加到下载Anaconda安装程序的Elastic Beanstalk部署中,并将其安装到/anaconda
中。一切顺利,但似乎无法按照Anaconda安装页面的建议正确修改我的实例的PATH以包含/anaconda/bin
。如果我通过SSH连接到一个实例并手动添加它,一切正常。但这显然不是正确的方法,因为机器将由EB自动添加。
所以我的问题是:如何在我的脚本中使用Anaconda?
更多细节:
/anaconda/bin
添加到系统路径中的所有方法。部署之前/之后的脚本,自定义环境变量等。似乎无论我做什么,修改都不会在应用程序运行时持续存在。 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语句中失败?答案 0 :(得分:9)
找到答案:import pandas
失败,因为matplotlib
无法初始化,因为它试图获取当前用户的主目录。由于应用程序是通过WSGI运行的,因此HOME变量设置为/home/wsgi
,但此目录不存在。因此,通过部署命令创建此目录可以解决此问题
.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')
干杯!