【问题标题】:Python Pyenv Pip appears to be isolated in Pyenv but installs into System (Awsclieb as example)Python Pyenv Pip 似乎在 Pyenv 中被隔离,但安装到系统中(以 Awsclieb 为例)
【发布时间】:2019-12-12 13:45:43
【问题描述】:

我正在尝试在 MBP (10.13.15) 上引入单独的 Python 版本,但我正式迷失了方向。

我已经成功地为 Python 3.7.4 创建了一个 pyenv 和一个 virtualenv。

但是,我遇到了使用 pyenv 和 virtualenv 在特定 Python 版本中安装的问题,这似乎与我的系统和其他路径没有隔离。我试图用我从下面的终端返回的一些命令来举例说明这一点。

例如,我正在尝试安装 awsclieb(用于弹性 beanstalk 的 AWS 命令​​行)。但是相应的问题让我觉得我的 PATH 出现了其他问题,其他安装将继续困扰我。

我有一个 pyenv/virtualenv:

(my-virtualenv-3.7.4) Peters-MacBook-Pro-4:~ peter$ python --version 返回:Python 3.7.4

pyenv 垫片:

(my-virtualenv-3.7.4) Peters-MacBook-Pro-4:~ peter$ which python 返回:/Users/peter/.pyenv/shims/python

但现在问题来了

pip install awsebcli

将返回重要警告:

The script chardetect is installed in '/Users/peter/.local/bin' which is not on PATH.

所以我在想,好吧 install 在我的 pyenv 中并没有被隔离,当我检查时:

eb --version

返回的是我默认系统(2.7.1)中安装的版本,而不是我的pyenv(3.7.4):

EB CLI 3.14.6 (Python 2.7.1)

我的解决方法是指定 pip 的 pyenv/virtualenv 位置:

/Users/peter/.pyenv/versions/3.7.4/envs/my-virtualenv-3.7.4/bin/pip install awsebcli

此安装没有 PATH 警告,这让我认为显式路径可以纠正非隔离问题。

然而,

eb --version 仍然返回,我的系统安装: EB CLI 3.14.6 (Python 2.7.1)

但是,如果我明确路径: (my-virtualenv-3.7.4) Peters-MacBook-Pro-4:~ peter$ /Users/peter/.pyenv/versions/3.7.4/envs/my-virtualenv-3.7.4/bin/eb --version

我的新安装被退回:

EB CLI 3.15.3 (Python 3.7.4)

我真正迷失的地方是我的 virtualenv 中的 pip 点的非显式版本

(my-virtualenv-3.7.4) Peters-MacBook-Pro-4:~ peter$ pip --version 返回: pip 19.0.3 from /Users/peter/.pyenv/versions/3.7.4/envs/my-virtualenv-3.7.4/lib/python3.7/site-packages/pip (python 3.7)

(my-virtualenv-3.7.4) Peters-MacBook-Pro-4:~ peter$ which pip

返回:

/Users/peter/.pyenv/shims/pip

为什么 pip 在 pyenv 中似乎是孤立的(通过 --version 和 which 命令),但 pip 却安装在我的系统环境中?

【问题讨论】:

    标签: python path virtualenv aws-cli pyenv


    【解决方案1】:

    无论出于何种原因,您的 pip 似乎都没有正确填充。您可以尝试将其称为模块。例如:

    python -m pip install awsebcli
    

    您甚至可以通过 PYENV_VERSION 传递要使用的虚拟机:

    PYENV_VERSION=my-virtualenv-3.7.4 eb --version
    

    【讨论】:

      【解决方案2】:

      更新我原来的问题。虽然,我仔细按照我认为正确的顺序添加到我的 ~/.bash_profile 中。我进行了编辑,以下顺序有效:

      if command -v pyenv 1>/dev/null 2>&1; then
        eval "$(pyenv init -)"
      fi
      
      export PATH=$PATH:~/opt/terraform/
      if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi
      eval "$(pyenv init -)"
      eval "$(pyenv virtualenv-init -)"
      

      【讨论】:

        猜你喜欢
        • 2021-09-30
        • 1970-01-01
        • 2021-07-19
        • 1970-01-01
        • 1970-01-01
        • 2020-08-23
        • 1970-01-01
        • 2022-08-16
        • 1970-01-01
        相关资源
        最近更新 更多