【问题标题】:Why is sudo required when using pip to install libraries into a virtualenv on an AWS EMR master node?为什么在使用 pip 将库安装到 AWS EMR 主节点上的 virtualenv 时需要 sudo?
【发布时间】: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 pythonwhich 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 listpip freeze 中。我什至深入研究了path/to/venv/lib/python3.4/dist-packages 并验证没有创建numpy 目录。

遗憾的是,这确实有效:

sudo path/to/venv/bin/pip install numpy

问题是:我不想使用 sudo,因为那会违反 best practices。但是,似乎大多数人都在使用 sudo 来执行此任务(例如 herehere),所以这可能只是 EMR 环境中的要求?

注意:此问题仅发生在 一些 库中。例如,pyspark 和 geocoder 安装良好,但 numpy 和 pandas 静默失败。

【问题讨论】:

  • 你需要展示你是如何运行导入numpy的代码的。很可能,您没有在安装它的 virtualenv 中这样做。
  • 这可能取决于从较低系统级别链接的 numpy 库。
  • python -m venv 可能是更新版本与独立 virtualenv
  • @DanielRoseman,我确信我的代码在我的 venv 内部运行,因为我通过直接调用 venv 二进制文件启动了一个交互式 Python shell。从那里,我只是尝试了import numpyimport pyspark 等。仅供参考,我最终解决了这个问题。请参阅下面发布的我的答案。

标签: python linux pip amazon-emr


【解决方案1】:

我最终弄明白了这一点:pip(有时,但并非总是)将模块放置在不在 Python 路径上的特定目录中!这似乎是 Amazon Linux 和 pip 之间的known bug

例如,numpy 被放置在:

path/to/venv/lib/python3.4/dist-packages/numpy

但是,pyspark 被放置在:

path/to/venv/lib64/python3.4/dist-packages/pyspark

后一个目录在 Python 路径上,但前一个不在。这就是为什么import pyspark 有效,而import numpy 无效。我们可以强制 pip 将库安装到适当的目录中,如下所示:

pip install numpy --target='/path/to/venv/lib/python3.4/dist-packages'

上面的命令解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2016-01-31
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    相关资源
    最近更新 更多