Вопрос или проблема
Я использую Ubuntu 19.10 на своем ноутбуке и недавно установил miniconda3. Проблем не было до тех пор, пока я не создал окружение с python 2.7, после чего каждый раз при открытии терминала я получаю следующее сообщение:
Команда 'python' не найдена, но её можно установить с помощью:
sudo apt install python3 # версия 3.7.5-1, или
sudo apt install python # версия 2.7.17-1
sudo apt install python-minimal # версия 2.7.17-1
Поэтому я последовал совету и установил python, после чего возникла такая ошибка:
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
ImportError: No module named conda
Моя догадка, что bash пытается получить доступ к conda python 2.7? Вот что я получаю, запустив which python
без активного conda:
which python
/usr/bin/python
which python3
/usr/bin/python3
whereis python
python: /usr/bin/python2.7 /usr/bin/python3.7 /usr/bin/python3.7m /usr/bin/python /usr/lib/python3.8 /usr/lib/python2.7 /usr/lib/python3.7 /etc/python2.7 /etc/python3.7 /etc/python /usr/local/lib/python2.7 /usr/local/lib/python3.7 /usr/include/python3.7m /usr/share/python /usr/share/man/man1/python.1.gz
с активированным conda, вот соответствующие результаты:
which python
/home/rustax/miniconda3/bin/python
which python3
/home/rustax/miniconda3/bin/python3
whereis python
python: /usr/bin/python2.7 /usr/bin/python3.7 /usr/bin/python3.7m /usr/bin/python /usr/lib/python3.8 /usr/lib/python2.7 /usr/lib/python3.7 /etc/python2.7 /etc/python3.7 /etc/python /usr/local/lib/python2.7 /usr/local/lib/python3.7 /usr/include/python3.7m /usr/share/python /home/rustax/miniconda3/bin/python3.7-config /home/rustax/miniconda3/bin/python3.7m /home/rustax/miniconda3/bin/python3.7 /home/rustax/miniconda3/bin/python3.7m-config /home/rustax/miniconda3/bin/python /usr/share/man/man1/python.1.gz
Вот что conda добавляет в файл .bashrc:
# >>> conda initialize >>>
# !! Содержимое в этом блоке управляeтся 'conda init' !!
__conda_setup="$('/home/rustax/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/home/rustax/miniconda3/etc/profile.d/conda.sh" ]; then
. "/home/rustax/miniconda3/etc/profile.d/conda.sh"
else
export PATH="/home/rustax/miniconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
Заранее благодарю за любую помощь, которую вы можете предоставить
Извините за всю эту сумятицу, но я решил проблему. Так как Ubuntu 19.10 не поставляется с предустановленным python2, чтобы избавиться от проблемы, я сначала удалил python (так как я установил его после установки conda, обратите внимание, что это python, а не python3, так как python3 поставляется предустановленным) и conda полностью с помощью следующих команд.
sudo apt-get purge --auto-remove python
rm -rf ~/miniconda3
rm -rf ~/.condarc ~/.conda ~/.continuum
После этого я установил python
sudo apt install python
И после установки python я установил conda обычным способом, и теперь не получаю ни одного из ранее упомянутых сообщений об ошибках при открытии терминала. Я думаю, что порядок переменных PATH имеет значение. Поскольку у меня были проблемы, когда я сначала устанавливал conda, а затем устанавливал python, и думаю, что путь к python conda мог оказаться первым.
Ответ или решение
Конечно, позволю себе объяснить возникшую проблему и предложить решение на профессиональном уровне.
Теория
Когда вы устанавливаете Anaconda или Miniconda, это предоставляет вам собственный менеджер пакетов и среды, обособленные от установок операционной системы. Conda управляет своими Python-интерпретаторами и библиотеками, а также изменяет переменную окружения PATH вашей системы, чтобы приоритет был именно у интерпретаторов conda. В результате, когда вы активируете новую среду conda, любая команда python
, запущенная в этой среде, будет ссылаться не на системную версию Python, а на ту, что используется в этой среде.
Когда вы сталкиваетесь с сообщением "Command ‘python’ not found", это потенциально указывает на то, что интерпретатор Python из новой среды не был добавлен в PATH корректно, или произошли конфликты с системными файлами Python, особенно если они устанавливаются через apt
. Это может произойти, если порядок добавления путей в PATH по каким-то причинам нарушен или если среда была неправильно создана.
Пример
В вашем случае, после того как вы установили Miniconda и создали среду с Python 2.7, в начале терминала появлялось сообщение о том, что команда python
не найдена. Вы пытались исправить это, установив системный Python через apt
, что привело к появлению ошибки: ImportError: No module named conda
.
Когда вы проверяли путь к интерпретатору Python через команду which
при активной и неактивной среде conda, становилось ясно, что системный Python и Python из conda пересекаются в PATH, вызывая путаницу. Это также подтверждается выводом команды whereis
, которая указывает на наличие нескольких местонаходжений Python в системе.
Применение
Ваше первоначальное решение — удаление и повторная установка как системного Python, так и Miniconda — является правильным шагом для устранения подобных конфликтов. Однако, немного детализируя процесс, вам следует убедиться в следующем:
-
Очистка старых файлов:
- Убедитесь, что команды для удаления действительно убирают все остаточные файлы, связанные как с системными, так и с conda-версиями Python:
sudo apt purge --remove python python-minimal python2.7 rm -rf ~/miniconda3 ~/.condarc ~/.conda ~/.continuum
- Убедитесь, что команды для удаления действительно убирают все остаточные файлы, связанные как с системными, так и с conda-версиями Python:
-
Правильная установка:
- Сначала установите системный Python перед Miniconda, чтобы избежать конфликта в PATH.
- Для этого используйте:
sudo apt install python
-
Установка Miniconda:
- После установки системного Python, загрузите и установите Miniconda, следуя официальным инструкциям. Убедитесь, что во время установки miniconda инкремент добавления PATH соответствует логике, что сначала в PATH идет системный Python, а потом Python от conda, когда конда-окружение активировано.
-
Инициализация conda:
- При необходимости, снова инициализируйте conda:
conda init
- При необходимости, снова инициализируйте conda:
-
Создание среды conda:
- Создавая новую среду, убедитесь в использовании соответствующих опций:
conda create --name myenv python=2.7
- Создавая новую среду, убедитесь в использовании соответствующих опций:
-
Диагностика:
- Периодически проверяйте, какой именно интерпретатор активируется запущенными командами
which
иwhereis
, как вы это делали раньше. Это поможет вам быстро понять, какой именно Python используется.
- Периодически проверяйте, какой именно интерпретатор активируется запущенными командами
-
Избегайте использования системного Python и conda одновременно:
- Если возможно, старайтесь работать в одной системе координат — если у вас уже есть conda, постарайтесь обходиться без установки отдельных пакетов через
apt
, что создаёт дополнительные точки возможных ошибок.
- Если возможно, старайтесь работать в одной системе координат — если у вас уже есть conda, постарайтесь обходиться без установки отдельных пакетов через
Применяя эти шаги, вы минимизируете риск конфликтов и системных ошибок, связанных с управлением версиями Python в Ubuntu. Ваш системный подход, описанный в конце, является верным, но понимание и устранение основной причины проблемы могут помочь избежать аналогичных случаев в будущем.