我正在使用 Amazon 的 Elastic Beanstalk 部署示例 Flask 应用程序。我可以完美地部署一个简单的“Hello World”应用程序,但现在我正尝试根据scipy
要求部署该应用程序。
我已将必要的软件包包含在我的.ebextensions/
:
packages:
yum:
gcc-c++: []
gcc-gfortran: []
python27-devel: []
atlas-sse3-devel: []
lapack-devel: []
libpng-devel: []
zlib-devel: []
postgresql93-devel: []
如果我离开scipy
文件numpy
,requirements.txt
部署将失败,因为numpy
必须在之前安装scipy
。
我可以通过scipy
从我的中注释掉requirements.txt
并向我的 添加一个container_commands
部分来解决此问题.ebextensions
:
container_commands:
01_install_scipy:
command: "pip install scipy"
我不喜欢这种方法,因为我希望所有需求都存在于我的requirements.txt
文件中以用于开发目的。选择性地从文件中注释掉 pip 需求requirements.txt
感觉不对,而且如果我有一堆依赖于 的其他库,可能会变得很复杂scipy
。
此外,从源代码构建 scipy 需要很长时间,尤其是在相对较小的 EC2 实例上。我曾尝试使用 进行安装yum
,但这会导致使用 的旧版本,而虚拟环境中scipy
没有。scipy
所以,我有两个问题:
- 要求.txt:有没有什么方法可以安装
scipy
到我的虚拟环境中而不需要我从我的文件中注释掉选择性要求requirements.txt
? - 速度:有没有办法预编译 scipy 并仍然使其在虚拟环境中可用?
答案1
您应该在部署应用程序之前将其打包(zip)。此包应包含应用程序所需的所有依赖项,这样您就不必在部署时预先安装模块。