После долгого "хождения по граблям" (как под 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