Как грамотно починить "сломанные" / переставшие работать модули Python?
📁 python, вопрос, ошибка, пример, работа
Все чаще появляются вопросы о ""сломанных"" / несовместимых / переставших работать модулях в Python и о сопутствующих этому ошибках:
ImportError: DLL load failed: ...ImportError: Could not import ...UnsatisfiableError: The following specifications were found to be in conflict: ...
и много других...
Описанные выше проблемы чаще всего возникают вследствие:
- установки нового модуля
- обновления Python
- обновления модуля / модулей
- обновления / изменения в VirtualEnv (виртуальной среде Python)
- неправильного использования
conda- например если использовать созданное по умолчанию виртуальное окружениеbase(оно используетсяcondaдля управления остальными вирт. окружениями), вместо явно созданного нового виртуального окружения
Вопрос:
как исправить данные проблемы и как избежать их появления в будущем?
После долгого ""хождения по граблям"" (как под UNIX* так и под Windows) я остановился на следующем подходе, который меня пока ни разу не подводил.
nОсновная идея в установке пакета Anaconda и создании независимых виртуальных окружений при помощи менеджера пакетов conda.
Anaconda проверяет совместимость версий модулей (включая зависимости). Это минимизирует вероятность поломать Python, просто установив или обновив некий модуль(и).
nАлгоритм установки Anaconda и создания VirtualEnv (независимого виртуального окружения Python):
- n
- Устанавливаем Anaconda или Miniconda n
- n
- Installing on Windows n
- Installing on Linux n
- Installing on macOS n
- n
- n
Обновляем менеджер пакетов
nconda(NOTE: чтобы избежать проблем - всегда запускайтеcondaизAnaconda Prompt):
nconda update condann - n
Никогда ""не трогайте"" Python, установленный по умолчанию в ОС или установленный другим программным обеспечением (например при установке Oracle Database, устанавливается отдельный Python, который будет использоваться Oracle). Под
n""не трогайте"" Pythonя подразумеваю внесение любых изменений, затрагивающих Python или его модули: n
- n
- установка новых модулей n
- обновление Python n
- обновление модулей n
- n
- n
Не утсанавливайте модули в виртуальную среду
nbaseсозданную по умолчанию. Устанавливайте модули только в те виртуальные среды, которые вы явно создали (см. следующий пункт -5). Виртуальное окружениеbase- это техническое окружение созданноеcondaдля управления остальными виртуальными средами. Если не хотите сломать сразу все виртуальные окружения не трогайтеbase. n - n
Для каждого более или менее независимого проекта на Python создавайте независимое виртуальное окружение (VirtualEnv). Можно дополнительно создать одно общее окружение для общих целей. В данном примере я создам общее окружение с названием
nml(Machine Leaing) для версииPython 3.7и основным набором модулей для работы над задачами машинного обучения (с поддержкой Nvidia GPU):
nconda create --name ml python=3.7 anaconda keras-gpunn - n
Для того чтобы запустить
nPython/Jupyter/iPython/ etc. из созданного VirtualEnv можно воспользоваться одним из следующих варантов: n
- n
- n
запустить
nAnaconda Prompt--> активировать в нём нужное вирт. окружение (conda activate <env_name>) --> запуститьipython/Jupyter-Notebookn - n
использовать CMD / shell скрипт для запуска
nipythonиз нужного вирт. окружения:
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`nn - n
использовать CMD / shell скрипт для запуска
nJupyter-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`nn - n
для проекта в PyCharm можно в качестве
nProject Interpreterуказать существующийConda Environmentn
- n
- Чтобы установить новый модуль всегда попробуйте сделать это в следующей последовательности: n
- n
- n
сначала всегда пробуем найти нужный модуль в репозитори Anaconda по умолчанию
n
nconda search <module_name>nn - n
если модуль найден - устанавливаем его в наш
nVirtualEnv(mlв нашем примере):
nconda install -n ml <module_name>nn - n
если модуль не найден, то пытаемся найти данный модуль в репозитории
nconda-forge(A community-led collection)
nconda search -c conda-forge <module_name>nn - n
если модуль найден - устанавливаем его в наш
nVirtualEnv(mlв нашем примере):
nconda install -c conda-forge -n ml <module_name>nn - n
только в том случае, если нужный модуль не найден ни в оригинальном Anaconda репозитории ни в
nconda-forge- используемpip install:
nconda activate mln pip install <module_name>nn
- n
- n
чтобы обновить модуль используйте менеджер пакетов
nconda:
nconda update -n ml <module_name>nn
n
Полезные ссылки:
n- n
- Conda Tutorial n
- Conda Cheat Sheet n
Войдите чтобы оставить ответ
Блоги