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

Posted

技术标签:

【中文标题】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` 【发布时间】:2021-07-27 17:59:44 【问题描述】:

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

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

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

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

我尝试将pip3 install aiopg --no-deps 以及此命令的不同变体添加到eb.configcommandscontainer_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 文件中尚不支持该标志?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于AWS Elastic Beanstalk Python (3.8) 平台:除了使用 `requirements.txt` 之外,为带有 `--no-deps` 标志的 Python 包运行额外的 p的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk CLI 安装错误

text AWS Elastic Beanstalk

HTTPS Elastic Beanstalk (AWS) 到 Android

AWS Elastic Beanstalk 无法担任角色

AWS Elastic Beanstalk

AWS Elastic Beanstalk chown PythonPath 错误