3

我的系统中安装了pyenv+virtualenvAnaconda来管理虚拟环境。

我的 .zshrc 文件如下所示:

# Load pyenv automatically:
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

# added by Anaconda3 4.2.0 installer
export PATH="$HOME/anaconda3/bin:$PATH"

在给定的文件夹中,我设置了一个本地pyenv虚拟环境

$ pyenv local test-env

列出该pyenv文件夹中的虚拟环境会导致:

$ pyenv versions
system
2.7.12
2.7.12/envs/test-env
* test-env (set by /home/<path>/.python-version)

但是,当我加载 python 而不是使用 Python v2.7.12 打开会话时(正如人们所期望的那样,因为pyenv加载了虚拟环境),我得到:

$ python
Python 3.5.2 |Anaconda custom (64-bit)| (default, Jul  2 2016, 17:53:06) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

很明显,Anaconda 平台正在我的pyenv虚拟环境之间进行。列出conda环境显示:

$ conda-env list
# conda environments:
#
root                  *  /home/<user>/anaconda3

如果我注释掉该export PATH="$HOME/anaconda3/bin:$PATH"行,pyenv则按预期工作。

有什么办法可以同时维护这两个管理器而不会相互冲突?

4

1 回答 1

7

答案显然隐藏在 pyenv 指令Basic GitHub Checkout的第 3 点中:

请确保eval "$(pyenv init -)"放置在 shell 配置文件的末尾,因为它PATH在初始化期间进行操作

所以解决方案是将该行移动到.zshrc文件的末尾,如下所示:

# added by Anaconda3 4.2.0 installer
export PATH="$HOME/anaconda3/bin:$PATH"

# Load pyenv automatically:
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
于 2017-02-19T14:45:29.243 回答