如何在Elastic Beanstalk上正确安装Python应用程序包?

问题描述 投票:0回答:1

我正在尝试在 Elastic Beanstalk 上部署 Python 应用程序。我知道如何安装 other Python 要求(即使用

requirements.txt
),但我不确定安装应用程序包本身的最佳方法。

我的项目结构如下:

project
|- .ebextensions/
|- .platform
|- requirements.txt
|- pyproject.toml
|- Procfile
|- src/
|  |- package
|  |  |- __init__.py
|  |  |- file.py

Procfile
看起来像这样:

web: uvicorn package.main:app --workers=4 --port 8000

并且 pyproject.toml 正确安装包(本地),这样我就可以做

python -c "import package"
无错误(来自任何目录)。

但是,应用程序无法部署,并出现以下错误:

<time> <ip> web[9080]: ModuleNotFoundError: No module named 'package'

我尝试将预部署脚本放入

.platform/hooks/predeploy/pip.sh
中,如下所示:

#!/bin/bash
source /var/app/venv/*/bin/activate
pip install -e .
chown -R webapp .
chown -R webapp /var/app/venv/

它运行没有错误(检查

/var/log/eb-hooks.log
),但它似乎没有修复错误。奇怪的是,我在
pip list
上看到了我的包,但导入它会引发错误。

如果我

eb ssh
并 sudo 运行上面的脚本,它就可以工作,并且我可以以
webapp
用户身份毫无问题地运行应用程序,这更令人困惑!但是,在
eb deploy
之后我仍然无法拥有一个可以工作的应用程序,除非我手动进入并运行脚本。

这让我想到以下问题:

  1. 正确的做法是什么?这似乎是做一件非常简单的事情的一种非常复杂的方法。
  2. 为什么该脚本不能用作预部署脚本?
python amazon-elastic-beanstalk
1个回答
0
投票

我想通了:您可以在

requirements.txt
中包含本地路径依赖项,例如:

这将安装包和子包:

file: .
file: ./subpackage

但是,请确保您没有阅读 setup.py 或类似文件中的requirements.txt!

© www.soinside.com 2019 - 2024. All rights reserved.