问题描述
有一个名为 Python
的 aiopg
包,用于异步处理 Postgresql
数据库。它有两个依赖项 - async-timeout
和 psycopg2-binary
。我不希望它在使用 psycopg2-binary
时安装 pip
,因为我使用的是常规的 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.config
(同时添加到 commands
和 container_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'
。
那么如何使用 pip
标志实现这个额外的 --no-deps
命令,而 requirements.txt
文件中尚不支持该标志?
解决方法
在发布这个问题之前,我花了一整天试图解决这个问题。但是在发布这篇文章后一段时间,我又在谷歌上搜索了一段时间,尝试了其他几种方法并找到了一个可行的解决方案。
我将问题中显示的 eb.config
文件中的最后一行更改为 command: /var/app/venv/.../bin/python -m pip install aiopg==1.2.1 --no-deps
,其中 ...
应替换为位于 /var/app/venv/
中的目录名称Beanstalk 的 EC2 实例。如果您设置了将日志导出到 pip
(您将看到您的 {{ 1}} 的环境)。