【问题标题】:pyenv failing to install package for python 3.5.3pyenv 无法为 python 3.5.3 安装包
【发布时间】:2017-06-23 15:38:48
【问题描述】:

我的机器上有多个版本的 python,这就是我安装 pyenv 来管理它们的原因。根据 pyenv 我有

ola@station:~$ pyenv versions
* system (set by /home/ola/.pyenv/version)
  3.4.6
  3.5.3
  3.6.1

如你所见,我将全局(系统默认)设置为 3.5.3

ola@station:~$ pyenv global
3.5.3

我想为 python 3.5 安装 numpy,因为它是那里缺少的模块。如果我正确理解了 pyenv 的工作原理,那么当我运行 sudo pip install numpy pyenv 时会发现要使用的全局版本是 3.5.3 并为此安装 numpy,对吗?

但是,我遇到以下问题:

ola@station:~$ sudo pip install numpy
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 6, in <module>
    from pkg_resources import load_entry_point
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2991, in <module>
    @_call_aside
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2977, in _call_aside
    f(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 3004, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 664, in _build_master
    return cls._build_from_requirements(__requires__)
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 677, in _build_from_requirements
    dists = ws.resolve(reqs, Environment())
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 856, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'pip==8.1.2' distribution was not found and is required by the application

我该如何解决这个问题?

注意运行 sudo pip3 install numpy 并没有帮助,因为它告诉我

ola@station:~$ sudo pip3 install numpy
Requirement already satisfied: numpy in /usr/local/lib/python2.7/dist-packages

但是我的机器上不存在 python 3.5.3 的 numpy。据我了解 pip3 版本和 python 版本是不同的东西。

【问题讨论】:

    标签: python pyenv


    【解决方案1】:

    你可以试试:

    sudo python3 -m pip install numpy
    

    如果这不起作用,您可以尝试从 python2.x 中删除 numpy。据我所知,Ubuntu 在 pip 方面有一些奇怪的怪癖,所以它也取决于你的操作系统/发行版。

    【讨论】:

    • 谢谢,这似乎有效。但我不明白。如果全局版本设置为 python 3.5.3,pyenv 不应该调用正确的 pip 吗?我正在使用 Debian
    • @user8 我不使用 pyenv,所以我无法判断,但我的猜测是,这是由于 sudo。如果您使用sudo,您实际上是在使用另一个用户帐户,因此环境会发生变化。
    • 对我来说 pyenv 选择了正确的 pip 但我总是将 python 本地的版本设置为一个目录。永远不要在我的 pyenv 中使用 sudo 或 pip3 ..
    • @user8 你也可以试试sudo --preserve-envsudo -E 看看是否可行。
    • @cardamom 如果您不想告诉 pip 在系统范围内安装某些东西,那么真的没有其他方法(好吧,也许除了su,但那是同一回事)。你需要root权限。
    【解决方案2】:

    这是一个老问题,但对于其他偶然发现它的人来说:

    使用pyenv which 确定将执行哪个脚本/可执行文件。例如,如果3.5.3 是您当前活动的 Python 版本,您应该会看到以下内容:

    ola@station:~$ pyenv which pip3
    /home/ola/.pyenv/versions/3.5.3/bin/pip3
    

    此时你可以这样做:

    pip3 install numpy
    

    不需要susudo,因为整个pyenv 安装都在~ola/.pyenv/ 下的主目录中。

    在您在问题中显示的所有示例中,似乎没有正确激活3.5.3,因为涉及/usr/local 下的系统范围的Python 2.7 版本。所以:

    • 使用pyenv version 检查当前活动的版本。
    • 使用pyenv which &lt;script&gt; 准确查看将执行的脚本。

    【讨论】:

      猜你喜欢
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 2021-04-06
      • 2020-06-13
      相关资源
      最近更新 更多