我可以让额外的包目录对 AWS-EB Python 应用程序部署过程可见吗?

Can I make an additional packages directory visible to the AWS-EB Python app deployment process?

在 AWS Elastic Beanstalk 上,我在不属于标准 Python 包路径的目录中有一些 Python packages installed(对于 2.6.x 或 2. 7.x Elastic Beanstalk 环境使用的版本)。因此,这些包在安装 requirements.txt 中列出的包时(默认情况下)对 AWS-EB 部署过程不可见,这可能导致安装冗余包,通常以(非常)长的时间为代价部署时间。

有没有办法让我的包的安装目录对部署过程可见?


从概念上讲,因为(我假设)requirements.txt 处理发生在我的应用程序的虚拟环境中(是吗?)I could

echo 'export PYTHONPATH="/anaconda/lib/python2.7/site-packages"' >> /opt/python/run/venv/bin/activate

在处理 requirements.txt 之前的某个阶段并且(对于 tidiness

sed -i '/^export PYTHONPATH/d' /opt/python/run/venv/bin/activate

当它停用时。但我不清楚这是否会在部署的正确时间点发生。而且无论如何,由于权限问题,它不起作用(当我 eb ssh 并且作为 container_commands 这些无效时,我被拒绝了)。也许像这样的事情是在正确的道路上;有什么地方可以 "hook" 类似的命令吗? (无论如何,它大致说明了我正在尝试做的事情。)

确保 Anaconda 在部署过程的早期和所有用户的 Python 模块搜索路径上的最简单方法是将 .pth 文件添加到系统站点包目录中一个 .ebextensions 文件:

files:
  "/opt/python/run/venv/lib/python2.7/site-packages/anaconda.pth":
    mode: "000644"
    owner: root
    group: root
    content: |
      /anaconda/lib/python2.7/site-packages

将 Anaconda 放在系统站点包目录中文件之后的额外好处(PYTHONPATH 会把它们放在前面)。