внешний python обнаруживается в среде анаконды - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь следовать этому простому учебнику , чтобы добавить различные версии python в anaconda. Я делаю следующее:

benjamins-mbp:ben ~ % conda create -n py36 python=3.6 anaconda  
benjamins-mbp:ben ~ % conda activate py36  
(py36) benjamins-mbp:ben ~ % python --version  
>>> Python 3.8.2

Я ожидаю Python 3.6.10

Однако, когда я открываю блокнот Jupyter в среде py36 и проверяю python, версия верна :

from platform import python_version
print(python_version()) 
>>> 3.6.10

Я полагаю, это происходит потому, что я создал псевдоним в .zshrc?

# Set alias for python3.8
alias python='python3.8'

(py36) benjamins-mbp:ben ~ % which python дает мне python: aliased to python3.8

Почему я могу доступ python3.8 из py36, где он не установлен? Как я могу это исправить, чтобы моя виртуальная среда ссылалась на свой python?

1 Ответ

2 голосов
/ 17 апреля 2020

Вы практически ответили на свой вопрос. Оболочки имеют тенденцию расширять псевдонимы, прежде чем делать что-либо еще. В этом весь смысл псевдонима.

Обычно программы имеют одну версию в вашей системе, поэтому маловероятно, что что-то вроде alias ls='ls -al' или alias rm='rm -i' может сбить вас с толку. Python особенный в этом отношении, потому что он эффективно поощряет установку нескольких версий в вашей системе (не говоря уже о нескольких копиях одной и той же версии) с виртуальными средами.

Виртуальные среды настраиваются с помощью переменных среды, таких как PATH. Они плохо играют с псевдонимами. Решение никогда не заключается в псевдониме python. Если вам нужно назвать это как-то еще, сделайте это символической ссылкой в ​​PATH для виртуальной среды, которую вы хотите.

Это не относится к установке системы python. Скорее всего, ваши скрипты ожидают, что конкретная версия будет обозначена как /usr/bin/python. На этом этапе ваша виртуальная среда должна заменить потребность в псевдониме.

...