Установка anaconda с помощью pyenv, невозможно настроить виртуальную среду - PullRequest
0 голосов
/ 22 сентября 2019

Я использую 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

(я не знаю, почему версия python добавляется в командную строку только при установке anaconda)

Когда я создаю новую виртуальную среду (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

(как ни странно, версия python, на которую datsci указывает , , кажется, распознает 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.

...

Проблема в том, что, насколько я понимаю, активация версии 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

безрезультатно.

ПОКАЗАТЬ содержимое этого каталога:

(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.cfg для datsci ... но я в растерянности.

Мне действительно нравится, как работает pyenv, и я бы хотелпродолжайте использовать это.Есть ли способ настроить anaconda для правильного поведения под pyenv?

Обновление:

Я удалил anaconda, управляемую pyenv, и заново установил в соответствии с рекомендациями Симбы.Теперь по умолчанию 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 <<<

Это важночтобы я продублировал оператор if, найденный в .bash_profile?

обновлении 2 Симбы:

Проблема решена, мне пришлось установить python в новой среде.

1 Ответ

1 голос
/ 22 сентября 2019

Личная рекомендация: не используйте pyenv для установки Anaconda или Miniconda.

Оба pyenv и conda способны управлять различными средами Python.anaconda, установленный pyenv, должен только служить интерпретатором Python .Создание среды Python из anaconda с помощью pyenv все еще обрабатывается pyenv virtualenv, но не conda env create.

Я использовал эти два инструмента вместе.Оказывается, лучшее решение - установить conda, pyenv отдельно и отдельно управлять их виртуальными средами.

  1. всегда инициализировать pyenv
  2. только команда выставленияconda, но не активировать среду

Сведения

Установить pyenv.

Устанавливайте Anaconda или Miniconda нормально, НЕ с помощью pyenv install.

Убедитесь, что команды pyenv и conda доступны в интерактивной оболочке.

Initialize pyenv путем помещения следующего содержимого в файл инициализации оболочки (.bashrc для Bash, .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 окружающая обстановка.Выполните следующие команды в вашей оболочке:

# 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

Примечание. После этой настройки по умолчанию используется питон, установленный 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

Расположение env по умолчанию для pyenv равно ~/.pyenv/versions.

Местоположение env по умолчанию для conda, проверьте вывод из conda info.

Ссылки

...