【发布时间】:2023-04-09 01:06:02
【问题描述】:
我正在尝试使用 pip 将库安装到 Python virtualenv 中,该虚拟环境位于 AWS EMR 主节点上。出于某种原因,sudo pip 工作正常,但非 sudo pip 静默失败。
一些背景:
- 我正在启动一个版本为 emr-5.19.0 的 EMR 集群。
- 我正在通过 SSH 连接到使用 Amazon Linux AMI 2018.03 的主节点。
- 默认情况下,此操作系统同时安装了 Python 2.7 和 3.4。
- 我基于已安装的 Python 3.4 创建了一个新的 virtualenv。
- 我激活了我的新 virtualenv,并验证了所有路径都指向我的 venv 安装(不是指向全局 Python 安装),例如
which python、which pip看起来都正确。
所以,我创建并激活我的 virtualenv 如下:
cd /home/ec2-user/my_app
virtualenv --python=python3.4 venv
source venv/bin/activate
这行得通。接下来,我尝试安装一个示例库,如下所示:
pip install numpy
输出是:
Collecting numpy
Installing collected packages: numpy
Successfully installed numpy-1.16.0
但是,尽管输出声称成功,import numpy 会产生导入错误,并且 numpy 不会出现在 pip list 或 pip freeze 中。我什至深入研究了path/to/venv/lib/python3.4/dist-packages 并验证没有创建numpy 目录。
遗憾的是,这确实有效:
sudo path/to/venv/bin/pip install numpy
问题是:我不想使用 sudo,因为那会违反 best practices。但是,似乎大多数人都在使用 sudo 来执行此任务(例如 here 和 here),所以这可能只是 EMR 环境中的要求?
注意:此问题仅发生在 一些 库中。例如,pyspark 和 geocoder 安装良好,但 numpy 和 pandas 静默失败。
【问题讨论】:
-
你需要展示你是如何运行导入numpy的代码的。很可能,您没有在安装它的 virtualenv 中这样做。
-
这可能取决于从较低系统级别链接的 numpy 库。
-
python -m venv
可能是更新版本与独立 virtualenv -
@DanielRoseman,我确信我的代码在我的 venv 内部运行,因为我通过直接调用 venv 二进制文件启动了一个交互式 Python shell。从那里,我只是尝试了
import numpy、import pyspark等。仅供参考,我最终解决了这个问题。请参阅下面发布的我的答案。
标签: python linux pip amazon-emr