Python Pyenv Pip 在 Pyenv 中似乎是独立的,但安装到系统中(例如 Awsclieb)

Python Pyenv Pip appears to be isolated in Pyenv but installs into System (Awsclieb as example)

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

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

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

例如,我正在尝试安装 awsclieb(elastic beanstalk 的 AWS 命令​​行)。但是相应的问题让我觉得我的 PATH 出现了其他问题,这将继续影响我的其他安装。

我有一个pyenv/virtualenv:

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

pyenv shimed:

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

但是现在的问题

pip install awsebcli

将return重要警告:

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

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

eb --version

return是我默认系统(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 仍然 returns,我的系统安装: 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

我安装了新的 returned:

EB CLI 3.15.3 (Python 3.7.4)

我真正迷路的地方是我的 virtualenv 中出现了我的 pip point 的非显式版本

(my-virtualenv-3.7.4) Peters-MacBook-Pro-4:~ peter$ pip --version returns: 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

returns:

/Users/peter/.pyenv/shims/pip

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

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

python -m pip install awsebcli

您甚至可以通过 PYENV_VERSION:

传递您想要使用的虚拟机
PYENV_VERSION=my-virtualenv-3.7.4 eb --version

更新我原来的问题。虽然,我仔细按照我认为是添加到我的 ~/.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 -)"