AWS Elastic Beanstalk Python (3.8) 平台:除了使用"requirements



有一个叫做aiopgPython包,用于异步处理PostgreSQL数据库。它有两个依赖项 -async-timeoutpsycopg2-binary.我不希望在使用pip时安装psycopg2-binary,因为我使用的是常规psycopg2包。这是因为psycopg2-binary的作者不建议在生产中使用它。

这一切都不会在本地工作产生任何问题,因为我可以将所需的aiopg依赖项添加到requirements.txt省略不需要的依赖项,然后运行两个单独的命令:

  1. pip install -r requirements.txt
  2. pip install aiopg --no-deps

但是当我将我的项目推送到Elastic Beanstalk它使用requirements.txt来安装Python包时,我不知道如何运行额外的pip命令。

我尝试将此命令pip3 install aiopg --no-deps以及不同的变体添加到eb.config(commandscontainer_commands部分),但无济于事。

现在我的eb.config看起来像这样:

packages:
yum:
amazon-linux-extras: []
commands:
01_postgres_activate:
command: sudo amazon-linux-extras enable postgresql11
02_postgres_install:
command: sudo yum install -y postgresql-devel
container_commands:
01_aiopg_install:
command: python3 -m pip install aiopg==1.2.1 --no-deps

但这不是醒来。Beanstalk 环境处于Severe状态,我的web.stdout.log仍然包含此错误:web: ModuleNotFoundError: No module named 'aiopg'.

那么,如何使用requirements.txt文件中尚不支持的标志实现此附加pip命令--no-deps

在发布这个问题之前,我花了一整天的时间试图解决这个问题。但是在发布此内容一段时间后,我又用谷歌搜索了一段时间,尝试了其他几种方法并找到了可行的解决方案。

我将问题中显示的eb.config文件中的最后一行更改为command: /var/app/venv/.../bin/python -m pip install aiopg==1.2.1 --no-deps,其中...应替换为 Beanstalk 的 EC2 实例中/var/app/venv/内的目录名称。 通过 SSH 连接到其中一个实例以查找此目录,或者如果您设置了将日志导出到CloudWatch,则在eb-engine.log中搜索pip命令(您将看到CC_的完整路径)36 的环境在那里)。

最新更新