python-3.x - 在 EC2 上的 virtualenv 中安装 pip 安装时 requirements.txt 文件中缺少包
问题描述
我在 EC2 实例 (2018-03) 的虚拟环境中安装各种软件包。Pip 成功安装了一些包,但不是全部。我正在使用pip install --force-reinstall -r requirements.txt
以下需求文件,该文件是在 Macos 上使用 Python 3.7.4 的工作实例的系统上创建的:
alembic==1.1.0
bcrypt==3.1.7
boto3==1.9.156
botocore==1.12.249
certifi==2019.9.11
cffi==1.12.3
chardet==3.0.4
Click==7.0
coverage==4.5.4
docutils==0.15.2
Flask==1.0.2
Flask-Bcrypt==0.7.1
Flask-Login==0.4.1
Flask-Migrate==2.5.2
Flask-Script==2.0.6
Flask-Session==0.3.1
Flask-SQLAlchemy==2.4.0
Flask-WTF==0.14.2
idna==2.8
itsdangerous==1.1.0
Jinja2==2.10.1
jmespath==0.9.4
lxml==4.3.2
Mako==1.1.0
MarkupSafe==1.1.1
numpy==1.16.2
pandas==0.24.2
patsy==0.5.1
psycopg2==2.8.3
pycparser==2.19
python-dateutil==2.8.0
python-editor==1.0.4
pytz==2019.2
requests==2.21.0
s3transfer==0.2.1
scikit-learn==0.20.3
scipy==1.2.1
six==1.12.0
SQLAlchemy==1.3.8
statsmodels==0.9.0
trimesh==3.1.11
urllib3==1.24.3
Werkzeug==0.15.5
WTForms==2.2.1
pip 给了我以下信息:
成功安装 Click-7.0 Flask-1.0.2 Flask-Bcrypt-0.7.1 Flask-Login-0.4.1 Flask-Migrate-2.5.2 Flask-SQLAlchemy-2.4.0 Flask-Script-2.0.6 Flask-Session-0.3 .1 Flask-WTF-0.14.2 Jinja2-2.10.1 Mako-1.1.0 MarkupSafe-1.1.1 SQLAlchemy-1.3.8 WTForms-2.2.1 Werkzeug-0.15.5 alembic-1.1.0 bcrypt-3.1.7 boto3 -1.9.156 botocore-1.12.249 certifi-2019.9.11 cffi-1.12.3 chardet-3.0.4 coverage-4.5.4 docutils-0.15.2 idna-2.8 itsdangerous-1.1.0 jmespath-0.9.4 lxml-4.3 .2 numpy-1.16.2 pandas-0.24.2 patsy-0.5.1 psycopg2-2.8.3 pycparser-2.19 python-dateutil-2.8.0 python-editor-1.0.4 pytz-2019.2 requests-2.21.0 s3transfer-0.2 .1 scikit-learn-0.20.3 scipy-1.2.1 六-1.12.0 statsmodels-0.9.0 trimesh-3.1.11 urllib3-1.24.3
但是,当我这样做时,pip list
我只看到安装了以下软件包。请注意,coverage
and psycopg2
,例如,被列为成功安装,但不显示。因此,快速python -c "import coverage"
将失败。
Package Version
---------------- ---------
alembic 1.1.0
boto3 1.9.156
botocore 1.12.249
certifi 2019.9.11
chardet 3.0.4
Click 7.0
docutils 0.15.2
Flask 1.0.2
Flask-Bcrypt 0.7.1
Flask-Login 0.4.1
Flask-Migrate 2.5.2
Flask-Script 2.0.6
Flask-Session 0.3.1
Flask-SQLAlchemy 2.4.0
Flask-WTF 0.14.2
idna 2.8
itsdangerous 1.1.0
Jinja2 2.10.1
jmespath 0.9.4
Mako 1.1.0
patsy 0.5.1
pip 19.3.1
pycparser 2.19
python-dateutil 2.8.0
python-editor 1.0.4
pytz 2019.2
requests 2.21.0
s3transfer 0.2.1
setuptools 41.6.0
six 1.12.0
trimesh 3.1.11
urllib3 1.24.3
Werkzeug 0.15.5
wheel 0.33.6
WTForms 2.2.1
我的问题是:
- 除了我已经尝试过的
--force-reinstall
和之外,还有其他方法可以解决 pip 选项吗?--no-cache-dir
- 我的问题是否与我可以在 EC2 上获取的最新支持的 Python 包是 3.6.8 的事实有关,但我的 requirements.txt 文件是在 3.7.4 系统上创建的?(是的,我知道,下次我会更聪明,从一开始就使用 docker。)
解决方案
在费了很多力气并且几乎完成了 Docker 训练营之后,我决定再回去一轮,发现了根本问题。在我的虚拟环境中,我注意到pip list
它只列出了 中列出的包$MYENV/lib/Python3.6/data/dist-packages
,而有问题的包都位于$MYENV/lib64/Python3.6/data/dist-packages
. 这导致了一些额外的搜索和这个响应,这表明将 dist-packages 的 lib64 版本符号链接到 lib 版本,这解决了我的问题。我正在使用 pip 版本 19.3.1,并且引用的文章是 2 年前的,所以我肯定会和一些人交谈。
但是,对于那些想要快速解决方案的人来说,这里是步骤。
全新的虚拟环境:像往常一样设置全新的虚拟环境。
Symlink BEFORE pip:在开始安装任何软件包之前进行符号链接。通常这看起来像:
ln -s $YOURENV/lib/Python3.x/data/dist-packages $YOURENV/lib64/Python3.x/data/dist-packages
- 继续 pip:不,你可以
pip install -r requirements.txt
像往常一样。仔细检查 apip list
,您应该会看到列出的所有包。
推荐阅读
- javascript - 放置默认值
- python - HTML 表单不想发送图像
- python - 将包含字典和字符串值的列表转换为数字数据框列
- swift - 使 Mapbox 注释根据变量具有不同的图像?
- javascript - wp_login_form() 锚点动态重定向
- visual-studio-code - 不能在 C 文件中包含任何内容,vs 代码
- swift - 如何在 SwiftUI 中更改分段选取器的颜色外观?
- pandas - Python pymannkendall 和 Pandas Groupby 解包结果
- corda - Corda - 即使使用通过 QuerybyAccount 查找令牌的相同查询,RedeemFungibleTokens 也会给出“可用状态不足”
- macos - DriverKit 系统扩展可以在启动时匹配热插拔设备吗?