AWS Elastic Beanstalk Python (3.8) 平台:运行 除了使用 `requirements.txt` 之外,带有 `--no-deps` 标志的 Python 包的附加 pip 命令

AWS Elastic Beanstalk Python (3.8) platform: run additional pip command for a Python package with `--no-deps` flag aside from using `requirements.txt`

有一个名为 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'.

那么我如何使用 --no-deps 标志实现这个额外的 pip 命令,requirements.txt 文件中还不支持它?

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

我将问题中显示的 eb.config 文件的最后一行更改为 command: /var/app/venv/.../bin/python -m pip install aiopg==1.2.1 --no-deps,其中 ... 应替换为 /var/app/venv/ 中的目录名称在您的 Beanstalk 的 EC2 实例中。如果您设置将日志导出到 CloudWatch(您将看到 pip 的环境)。