使用pyenv安装anaconda,无法配置虚拟环境

马克斯·里昂

我正在使用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似乎认识到畅达:

(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$ 

我想知道pyvenv.cfgdatsci文件中的内容是否错误...但是我很茫然。

我真的很喜欢pyenv的工作方式,并且我想继续使用它。有没有一种方法可以将anaconda配置为在pyenv下正常运行?

更新:

我卸载了由pyenv管理的anaconda,并按照Simba的建议进行了全新安装。现在默认情况下pyenv确定活动的python安装,我可以使用以下命令激活conda 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环境后conda create --name datsci,新的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的if语句是否重要 .bash_profile?

更新2:

问题解决了,我不得不在新环境中安装python。

辛巴

个人建议:不要pyenv用于安装Anaconda或Miniconda。

双方pyenvconda能够管理不同的Python环境。anaconda由安装pyenv只宜作为一个Python解释器从安装的anaconda创建Python环境pyenv仍由,pyenv virtualenv但不是conda env create

我一直一起使用这两个工具。事实证明,最好的解决办法是安装condapyenv单独和管理他们的虚拟环境来说也是一样。

  1. 总是初始化 pyenv
  2. 仅公开命令,conda但不激活任何环境

详情

安装pyenv

正常安装Anaconda或Miniconda,而不要安装pyenv install

确保pyenvandconda命令在交互式外壳中可用。

初始化pyenv通过将下面的内容放入外壳初始化文件(.bashrc用于猛砸,.zshrc为ZSH)。

# 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分别使用pyenvconda管理环境。

管理虚拟环境的示例。

# 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

默认ENV位置pyenv~/.pyenv/versions

的默认环境位置conda,请检查的输出conda info

参考文献

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章