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