用pyenv安装anaconda,无法配置虚拟环境
Installing anaconda with pyenv, unable to configure virtual environment
我正在使用 pyenv 来管理 python 安装和虚拟环境 - 我希望 anaconda 成为这样的安装,并且能够使用 anaconda python 创建虚拟环境。使用 pyenv install anaconda3-2019.03
成功安装,我可以使用 pyenv global anaconda3-2019.03
:
激活版本
SamLee-PC:~ max$ pyenv versions
system
2.7.10
2.7.10/envs/flask_tutorial
* 3.7.4 (set by /Users/max/.pyenv/version)
3.7.4/envs/learning_python
3.7.4/envs/microblog
3.7.4/envs/stocktool
3.7.4/envs/test1
anaconda3-2019.03
anaconda3-2019.03/envs/datsci
datsci
flask_tutorial
learning_python
microblog
stocktool
test1
SamLee-PC:~ max$ pyenv which python
/Users/max/.pyenv/versions/3.7.4/bin/python
SamLee-PC:~ max$ pyenv global anaconda3-2019.03
(anaconda3-2019.03) SamLee-PC:~ max$ pyenv which python
/Users/max/.pyenv/versions/anaconda3-2019.03/bin/python
(anaconda3-2019.03) SamLee-PC:~ max$ pyenv which conda
/Users/max/.pyenv/versions/anaconda3-2019.03/bin/conda
(不知道为什么只有安装anaconda才在命令提示符里加了python版本)
当我创建一个新的虚拟环境 (pyenv virtualenv anaconda3-2019.03 datsci
) 时,它似乎按预期工作:
SamLee-PC:~ max$ pyenv which python
/Users/max/.pyenv/versions/3.7.4/bin/python
SamLee-PC:~ max$ cd code/linkedin/datsci
(datsci) SamLee-PC:datsci max$ pyenv which python
/Users/max/.pyenv/versions/datsci/bin/python
(datsci) SamLee-PC:datsci max$
这与 pyenv which python
在我的其他虚拟环境中返回的相对位置相同,它们都正常工作。
问题是在虚拟环境中获得运行的python版本无法访问所有anaconda的包:
(datsci) SamLee-PC:datsci max$ anaconda-navigator
pyenv: anaconda-navigator: command not found
The `anaconda-navigator' command exists in these Python versions:
anaconda3-2019.03
(datsci) SamLee-PC:datsci max$
虽然如果我手动激活 python 安装它会:
SamLee-PC:~ max$ pyenv global anaconda3-2019.03
(anaconda3-2019.03) SamLee-PC:~ max$ anaconda-navigator
WARNING: The conda.compat module is deprecated and will be removed in a future release.
/Users/max/.pyenv/versions/anaconda3-2019.03/lib/python3.7/site-packages/anaconda_navigator/api/conda_api.py:1364: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
data = yaml.load(f)
2019-09-21 14:03:38,666 - ERROR download_api._download:234
Invalid url https://www.anaconda.com/wp-content/uploads/2017/05/Webinar20-20Three20Ways20to20Move20your20Data20Science20Projects20to20Production.png
#anaconda navigator GUI opens
(奇怪的是,datsci
指向 的 python 版本 似乎可以识别 conda:
(datsci) SamLee-PC:datsci max$ pyenv which python
/Users/max/.pyenv/versions/datsci/bin/python
(datsci) SamLee-PC:datsci max$ conda
usage: conda [-h] [-V] command ...
conda is a tool for managing and deploying applications, environments and packages.
...
问题是,据我所知,每当我想要 anaconda 时以这种方式激活 python 版本意味着我只能访问一个版本的 anaconda python - 破坏了目的在虚拟环境中使用它。
另一个难题 - 我注意到对于我的其他虚拟环境,~/.pyenv/versions/name-of-virtualenv
包含一个文件 pyvenv.cfg
,其中包含例如以下:
1 home = /Users/max/.pyenv/versions/3.7.4/bin
2 include-system-site-packages = false
3 version = 3.7.4
~/.pyenv/versions/datsci
中没有这个文件,所以我加了一个:
1 home = /Users/max/.pyenv/versions/anaconda3-2019.03/bin
2 include-system-site-packages = false
3 version = anaconda3-2019.03
无济于事。
FWIW 该目录的内容是:
(anaconda3-2019.03) SamLee-PC:datsci max$ pwd
/Users/max/.pyenv/versions/datsci
(anaconda3-2019.03) SamLee-PC:datsci max$ ls
bin conda-meta include lib pyvenv.cfg share ssl
(anaconda3-2019.03) SamLee-PC:datsci max$
我想知道我是否在 datsci 的 pyvenv.cfg
文件中有错误的内容...但是我很茫然。
我非常喜欢 pyenv 的工作方式,我想继续使用它。有没有办法配置 anaconda 在 pyenv 下正常运行?
更新:
我卸载了 pyenv 管理的 anaconda,并按照 Simba 的建议进行了全新安装。现在默认情况下 pyenv 确定活动的 python 安装,我可以使用 conda activate base
:
激活 conda
Maxs-MacBook-Air:~ max$ which python
/Users/max/.pyenv/shims/python
Maxs-MacBook-Air:~ max$ conda activate base
(base) Maxs-MacBook-Air:~ max$ which python
/Users/max/anaconda3/bin/python
(base) Maxs-MacBook-Air:~ max$
但是在使用conda create --name datsci
创建新的conda环境后,新的conda环境似乎无法正常激活:
Maxs-MacBook-Air:~ max$ conda activate datsci
(datsci) Maxs-MacBook-Air:~ max$ which python
/Users/max/.pyenv/shims/python
我错过了什么?
这是我的 .bash_profile
的内容:
1 export PATH="/Users/max/.pyenv/bin:$PATH"
2 eval "$(pyenv init -)"
3 eval "$(pyenv virtualenv-init -)"
4
5 # >>> conda initialize >>>
6 # !! Contents within this block are managed by 'conda init' !!
7 __conda_setup="$('/Users/max/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
8 if [ $? -eq 0 ]; then
9 eval "$__conda_setup"
10 else
11 if [ -f "/Users/max/anaconda3/etc/profile.d/conda.sh" ]; then
12 . "/Users/max/anaconda3/etc/profile.d/conda.sh"
13 else
14 export PATH="/Users/max/anaconda3/bin:$PATH"
15 fi
16 fi
17 unset __conda_setup
18 # <<< conda initialize <<<
复制 Simba .bash_profile?
中的 if 语句是否重要
更新 2:
问题已解决,我不得不在新环境中安装python。
个人建议:不要使用pyenv
安装Anaconda或Miniconda。
pyenv
和 conda
都能够管理不同的 python 环境。 pyenv
安装的 anaconda
应该只 作为 Python 解释器 。 Python pyenv
安装的 anaconda 环境创建仍然由 pyenv virtualenv
处理,但不是 conda env create
。
我一直在同时使用这两个工具。事实证明,最好的解决方案是分别安装 conda
、pyenv
,并分别管理它们的虚拟环境。
- 总是初始化
pyenv
- 仅公开命令
conda
但不激活任何环境
详情
安装pyenv
。
正常安装 Anaconda 或 Miniconda,而不是 pyenv install
。
确保 pyenv
和 conda
命令在交互式 shell 中可用。
通过将以下内容放入 shell 初始化文件来初始化 pyenv
(Bash 为 .bashrc
,ZSH 为 .zshrc
)。
# Put the content into ~/.bashrc or ~/.bash_profile for Bash,
# .zshrc for ZSH
# you may need to add dir of command `pyenv` into PATH,
# if command pyenv is not available yet
if command -v pyenv &>/dev/null; then
eval "$(pyenv init -)"
fi
if command -v pyenv-virtualenv &>/dev/null; then
eval "$(pyenv virtualenv-init -)"
fi
公开命令 conda
但不激活任何环境,即使是 base
环境。在 shell.
中执行以下命令
# Run the content in the shell
# init conda, the following command write scripts into your shell init file automatically
conda init
# disable init of env "base"
conda config --set auto_activate_base false
注意:此设置后,默认python是pyenv global
设置的那个。使用 pyenv
和 conda
分别管理环境。
管理虚拟环境的示例。
# virtual environments from pyenv
pyenv install 3.6.9
pyenv virtualenv 3.6.9 new-env
pyenv activate new-env
pyenv deactive
# You can also use `pyenv local`
# virtual environments from conda
conda env create new-env python=3.6
conda env list
conda activate new-env
conda deactivate
pyenv
的默认环境位置是 ~/.pyenv/versions
。
conda
的默认环境位置,检查 conda info
的输出。
参考资料
我正在使用 pyenv 来管理 python 安装和虚拟环境 - 我希望 anaconda 成为这样的安装,并且能够使用 anaconda python 创建虚拟环境。使用 pyenv install anaconda3-2019.03
成功安装,我可以使用 pyenv global anaconda3-2019.03
:
SamLee-PC:~ max$ pyenv versions
system
2.7.10
2.7.10/envs/flask_tutorial
* 3.7.4 (set by /Users/max/.pyenv/version)
3.7.4/envs/learning_python
3.7.4/envs/microblog
3.7.4/envs/stocktool
3.7.4/envs/test1
anaconda3-2019.03
anaconda3-2019.03/envs/datsci
datsci
flask_tutorial
learning_python
microblog
stocktool
test1
SamLee-PC:~ max$ pyenv which python
/Users/max/.pyenv/versions/3.7.4/bin/python
SamLee-PC:~ max$ pyenv global anaconda3-2019.03
(anaconda3-2019.03) SamLee-PC:~ max$ pyenv which python
/Users/max/.pyenv/versions/anaconda3-2019.03/bin/python
(anaconda3-2019.03) SamLee-PC:~ max$ pyenv which conda
/Users/max/.pyenv/versions/anaconda3-2019.03/bin/conda
(不知道为什么只有安装anaconda才在命令提示符里加了python版本)
当我创建一个新的虚拟环境 (pyenv virtualenv anaconda3-2019.03 datsci
) 时,它似乎按预期工作:
SamLee-PC:~ max$ pyenv which python
/Users/max/.pyenv/versions/3.7.4/bin/python
SamLee-PC:~ max$ cd code/linkedin/datsci
(datsci) SamLee-PC:datsci max$ pyenv which python
/Users/max/.pyenv/versions/datsci/bin/python
(datsci) SamLee-PC:datsci max$
这与 pyenv which python
在我的其他虚拟环境中返回的相对位置相同,它们都正常工作。
问题是在虚拟环境中获得运行的python版本无法访问所有anaconda的包:
(datsci) SamLee-PC:datsci max$ anaconda-navigator
pyenv: anaconda-navigator: command not found
The `anaconda-navigator' command exists in these Python versions:
anaconda3-2019.03
(datsci) SamLee-PC:datsci max$
虽然如果我手动激活 python 安装它会:
SamLee-PC:~ max$ pyenv global anaconda3-2019.03
(anaconda3-2019.03) SamLee-PC:~ max$ anaconda-navigator
WARNING: The conda.compat module is deprecated and will be removed in a future release.
/Users/max/.pyenv/versions/anaconda3-2019.03/lib/python3.7/site-packages/anaconda_navigator/api/conda_api.py:1364: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
data = yaml.load(f)
2019-09-21 14:03:38,666 - ERROR download_api._download:234
Invalid url https://www.anaconda.com/wp-content/uploads/2017/05/Webinar20-20Three20Ways20to20Move20your20Data20Science20Projects20to20Production.png
#anaconda navigator GUI opens
(奇怪的是,datsci
指向 的 python 版本 似乎可以识别 conda:
(datsci) SamLee-PC:datsci max$ pyenv which python
/Users/max/.pyenv/versions/datsci/bin/python
(datsci) SamLee-PC:datsci max$ conda
usage: conda [-h] [-V] command ...
conda is a tool for managing and deploying applications, environments and packages.
...
问题是,据我所知,每当我想要 anaconda 时以这种方式激活 python 版本意味着我只能访问一个版本的 anaconda python - 破坏了目的在虚拟环境中使用它。
另一个难题 - 我注意到对于我的其他虚拟环境,~/.pyenv/versions/name-of-virtualenv
包含一个文件 pyvenv.cfg
,其中包含例如以下:
1 home = /Users/max/.pyenv/versions/3.7.4/bin
2 include-system-site-packages = false
3 version = 3.7.4
~/.pyenv/versions/datsci
中没有这个文件,所以我加了一个:
1 home = /Users/max/.pyenv/versions/anaconda3-2019.03/bin
2 include-system-site-packages = false
3 version = anaconda3-2019.03
无济于事。
FWIW 该目录的内容是:
(anaconda3-2019.03) SamLee-PC:datsci max$ pwd
/Users/max/.pyenv/versions/datsci
(anaconda3-2019.03) SamLee-PC:datsci max$ ls
bin conda-meta include lib pyvenv.cfg share ssl
(anaconda3-2019.03) SamLee-PC:datsci max$
我想知道我是否在 datsci 的 pyvenv.cfg
文件中有错误的内容...但是我很茫然。
我非常喜欢 pyenv 的工作方式,我想继续使用它。有没有办法配置 anaconda 在 pyenv 下正常运行?
更新:
我卸载了 pyenv 管理的 anaconda,并按照 Simba 的建议进行了全新安装。现在默认情况下 pyenv 确定活动的 python 安装,我可以使用 conda activate base
:
Maxs-MacBook-Air:~ max$ which python
/Users/max/.pyenv/shims/python
Maxs-MacBook-Air:~ max$ conda activate base
(base) Maxs-MacBook-Air:~ max$ which python
/Users/max/anaconda3/bin/python
(base) Maxs-MacBook-Air:~ max$
但是在使用conda create --name datsci
创建新的conda环境后,新的conda环境似乎无法正常激活:
Maxs-MacBook-Air:~ max$ conda activate datsci
(datsci) Maxs-MacBook-Air:~ max$ which python
/Users/max/.pyenv/shims/python
我错过了什么?
这是我的 .bash_profile
的内容:
1 export PATH="/Users/max/.pyenv/bin:$PATH"
2 eval "$(pyenv init -)"
3 eval "$(pyenv virtualenv-init -)"
4
5 # >>> conda initialize >>>
6 # !! Contents within this block are managed by 'conda init' !!
7 __conda_setup="$('/Users/max/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
8 if [ $? -eq 0 ]; then
9 eval "$__conda_setup"
10 else
11 if [ -f "/Users/max/anaconda3/etc/profile.d/conda.sh" ]; then
12 . "/Users/max/anaconda3/etc/profile.d/conda.sh"
13 else
14 export PATH="/Users/max/anaconda3/bin:$PATH"
15 fi
16 fi
17 unset __conda_setup
18 # <<< conda initialize <<<
复制 Simba .bash_profile?
更新 2:
问题已解决,我不得不在新环境中安装python。
个人建议:不要使用pyenv
安装Anaconda或Miniconda。
pyenv
和 conda
都能够管理不同的 python 环境。 pyenv
安装的 anaconda
应该只 作为 Python 解释器 。 Python pyenv
安装的 anaconda 环境创建仍然由 pyenv virtualenv
处理,但不是 conda env create
。
我一直在同时使用这两个工具。事实证明,最好的解决方案是分别安装 conda
、pyenv
,并分别管理它们的虚拟环境。
- 总是初始化
pyenv
- 仅公开命令
conda
但不激活任何环境
详情
安装pyenv
。
正常安装 Anaconda 或 Miniconda,而不是 pyenv install
。
确保 pyenv
和 conda
命令在交互式 shell 中可用。
通过将以下内容放入 shell 初始化文件来初始化 pyenv
(Bash 为 .bashrc
,ZSH 为 .zshrc
)。
# Put the content into ~/.bashrc or ~/.bash_profile for Bash,
# .zshrc for ZSH
# you may need to add dir of command `pyenv` into PATH,
# if command pyenv is not available yet
if command -v pyenv &>/dev/null; then
eval "$(pyenv init -)"
fi
if command -v pyenv-virtualenv &>/dev/null; then
eval "$(pyenv virtualenv-init -)"
fi
公开命令 conda
但不激活任何环境,即使是 base
环境。在 shell.
# Run the content in the shell
# init conda, the following command write scripts into your shell init file automatically
conda init
# disable init of env "base"
conda config --set auto_activate_base false
注意:此设置后,默认python是pyenv global
设置的那个。使用 pyenv
和 conda
分别管理环境。
管理虚拟环境的示例。
# virtual environments from pyenv
pyenv install 3.6.9
pyenv virtualenv 3.6.9 new-env
pyenv activate new-env
pyenv deactive
# You can also use `pyenv local`
# virtual environments from conda
conda env create new-env python=3.6
conda env list
conda activate new-env
conda deactivate
pyenv
的默认环境位置是 ~/.pyenv/versions
。
conda
的默认环境位置,检查 conda info
的输出。