【问题标题】:Can I make an additional packages directory visible to the AWS-EB Python app deployment process?我可以让 AWS-EB Python 应用程序部署过程可以看到额外的包目录吗?
【发布时间】:2024-05-21 15:40:02
【问题描述】:

在 AWS Elastic Beanstalk 上,我有一些 Python packages installed 位于不属于标准 Python 包路径的目录中(对于 Elastic Beanstalk 环境使用的 2.6.x 或 2.7.x 版本)。因此,在安装 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 sshcontainer_commands 时我被拒绝,这些都没有效果)。也许这样的事情是在正确的道路上;有没有我可以"hook" 类似命令的地方? (无论如何,它大致说明了我正在尝试做的事情。)

【问题讨论】:

  • 为什么不在你的代码中添加你的 python 路径?
  • 我的代码没有进行部署。我的目标是在处理 requirements.txt 时(而不是在我的代码运行时)将目录放在 Python 包路径上,以便在那里遇到的任何依赖关系都可以通过我已经安装在该目录中的包来实现,而不是(慢慢地) 再次安装。
  • 为什么不在你的 requirements.txt 中包含模块?
  • 它是 matplotlib、scipy、numby 等。它们最多需要 45 分钟才能构建。
  • requirements.txt 基本上是一个“你想让我为你安装什么”文件。如果您以其他方式安装这些模块,请不要将它们放在您的 requirements.txt 中,它们不会被重新安装。

标签: python amazon-web-services pip amazon-elastic-beanstalk


【解决方案1】:

在部署过程的早期确保 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 会将它们放在之前)。

【讨论】: