После долгого "хождения по граблям" (как под UNIX* так и под Windows) я остановился на следующем подходе, который меня пока ни разу не подводил.

Основная идея в установке пакета Anaconda и создании независимых виртуальных окружений при помощи менеджера пакетов conda.

Anaconda проверяет совместимость версий модулей (включая зависимости). Это минимизирует вероятность поломать Python, просто установив или обновив некий модуль(и).

Алгоритм установки Anaconda и создания VirtualEnv (независимого виртуального окружения Python):

  1. Устанавливаем Anaconda или Miniconda
  1. Обновляем менеджер пакетов conda (NOTE: чтобы избежать проблем - всегда запускайте conda из Anaconda Prompt):

     conda update conda
    
    
  2. Никогда "не трогайте" Python, установленный по умолчанию в ОС или установленный другим программным обеспечением (например при установке Oracle Database, устанавливается отдельный Python, который будет использоваться Oracle). Под "не трогайте" Python я подразумеваю внесение любых изменений, затрагивающих Python или его модули:

  1. Не утсанавливайте модули в виртуальную среду base созданную по умолчанию. Устанавливайте модули только в те виртуальные среды, которые вы явно создали (см. следующий пункт - 5). Виртуальное окружение base - это техническое окружение созданное conda для управления остальными виртуальными средами. Если не хотите сломать сразу все виртуальные окружения не трогайте base.

  2. Для каждого более или менее независимого проекта на Python создавайте независимое виртуальное окружение (VirtualEnv). Можно дополнительно создать одно общее окружение для общих целей. В данном примере я создам общее окружение с названием ml (Machine Learning) для версии Python 3.7 и основным набором модулей для работы над задачами машинного обучения (с поддержкой Nvidia GPU):

     conda create --name ml python=3.7 anaconda keras-gpu
    
    
  3. Для того чтобы запустить Python / Jupyter / iPython / etc. из созданного VirtualEnv можно воспользоваться одним из следующих варантов: