После долгого "хождения по граблям" (как под UNIX* так и под Windows) я остановился на следующем подходе, который меня пока ни разу не подводил.
Основная идея в установке пакета Anaconda и создании независимых виртуальных окружений при помощи менеджера пакетов conda
.
Anaconda проверяет совместимость версий модулей (включая зависимости). Это минимизирует вероятность поломать Python, просто установив или обновив некий модуль(и).
Алгоритм установки Anaconda и создания VirtualEnv
(независимого виртуального окружения Python):
Обновляем менеджер пакетов conda
(NOTE: чтобы избежать проблем - всегда запускайте conda
из Anaconda Prompt
):
conda update conda
Никогда "не трогайте" Python, установленный по умолчанию в ОС или установленный другим программным обеспечением (например при установке Oracle Database, устанавливается отдельный Python, который будет использоваться Oracle). Под "не трогайте" Python
я подразумеваю внесение любых изменений, затрагивающих Python или его модули:
Не утсанавливайте модули в виртуальную среду base
созданную по умолчанию. Устанавливайте модули только в те виртуальные среды, которые вы явно создали (см. следующий пункт - 5
). Виртуальное окружение base
- это техническое окружение созданное conda
для управления остальными виртуальными средами. Если не хотите сломать сразу все виртуальные окружения не трогайте base
.
Для каждого более или менее независимого проекта на Python создавайте независимое виртуальное окружение (VirtualEnv). Можно дополнительно создать одно общее окружение для общих целей. В данном примере я создам общее окружение с названием ml
(Machine Learning) для версии Python 3.7
и основным набором модулей для работы над задачами машинного обучения (с поддержкой Nvidia GPU):
conda create --name ml python=3.7 anaconda keras-gpu
Для того чтобы запустить Python
/ Jupyter
/ iPython
/ etc. из созданного VirtualEnv можно воспользоваться одним из следующих варантов:
запустить Anaconda Prompt
--> активировать в нём нужное вирт. окружение (conda activate <env_name>
) --> запустить ipython
/ Jupyter-Notebook
использовать CMD / shell скрипт для запуска ipython
из нужного вирт. окружения:
@echo off
set conda_dir=%USERPROFILE%\\Anaconda3
set env_name=%1
if "%env_name%"=="" set env_name=ml
set env_dir=%conda_dir%\\envs\\%env_name%
rem cd %env_dir%
call %conda_dir%\\Scripts\\activate.bat %env_dir%
%env_dir%\\Scripts\\ipython.exe
Пример вызова: `c:\\bin\\ipy_env.cmd ml37`
использовать CMD / shell скрипт для запуска Jupyter-Notebook
из нужного вирт. окружения:
@echo off
set env_name=%1
if "%env_name%"=="" set env_name=ml
set env_dir=%USERPROFILE%\\Anaconda3\\envs\\%env_name%
rem cd %env_dir%
call %USERPROFILE%\\Anaconda3\\Scripts\\activate.bat %env_dir%
start cmd.exe /k "%USERPROFILE%\\Anaconda3\\envs\\%env_name%\\Scripts\\jupyter-notebook.exe"
Пример вызова: `C:\\bin\\jupyter_env.cmd torch`
для проекта в PyCharm можно в качестве Project Interpreter
указать существующий Conda Environment