Команда ‘python’ не найдена после создания среды conda.

Вопрос или проблема

Я использую 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 — является правильным шагом для устранения подобных конфликтов. Однако, немного детализируя процесс, вам следует убедиться в следующем:

  1. Очистка старых файлов:

    • Убедитесь, что команды для удаления действительно убирают все остаточные файлы, связанные как с системными, так и с conda-версиями Python:
      sudo apt purge --remove python python-minimal python2.7
      rm -rf ~/miniconda3 ~/.condarc ~/.conda ~/.continuum
  2. Правильная установка:

    • Сначала установите системный Python перед Miniconda, чтобы избежать конфликта в PATH.
    • Для этого используйте:
      sudo apt install python
  3. Установка Miniconda:

    • После установки системного Python, загрузите и установите Miniconda, следуя официальным инструкциям. Убедитесь, что во время установки miniconda инкремент добавления PATH соответствует логике, что сначала в PATH идет системный Python, а потом Python от conda, когда конда-окружение активировано.
  4. Инициализация conda:

    • При необходимости, снова инициализируйте conda:
      conda init
  5. Создание среды conda:

    • Создавая новую среду, убедитесь в использовании соответствующих опций:
      conda create --name myenv python=2.7
  6. Диагностика:

    • Периодически проверяйте, какой именно интерпретатор активируется запущенными командами which и whereis, как вы это делали раньше. Это поможет вам быстро понять, какой именно Python используется.
  7. Избегайте использования системного Python и conda одновременно:

    • Если возможно, старайтесь работать в одной системе координат — если у вас уже есть conda, постарайтесь обходиться без установки отдельных пакетов через apt, что создаёт дополнительные точки возможных ошибок.

Применяя эти шаги, вы минимизируете риск конфликтов и системных ошибок, связанных с управлением версиями Python в Ubuntu. Ваш системный подход, описанный в конце, является верным, но понимание и устранение основной причины проблемы могут помочь избежать аналогичных случаев в будущем.

Оцените материал
Добавить комментарий

Капча загружается...