#Что произошло и когда проявляется ошибка
Установленный пакет может содержать другие имена модулей, быть установлен в другом Python или иметь ошибку во вложенной зависимости: нужно отличать отсутствие пакета от неправильного имени импорта.
#Причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Имя в pip отличается от имени модуляИмя дистрибутива и имя импортируемого модуля не обязаны совпадать. | pip show находит пакет, а import по тому же имени не работает | Проверить описание и пример импорта в документации пакета. |
Пакет в другом окруженииИспользуется разный sys.executable. | python -m pip show в одной среде даёт результат, а в другой нет | Установить зависимость в среду запуска. |
| Вложенная зависимость отсутствуетКод внутри установленного пакета импортирует отдельную зависимость. | В traceback указан не тот модуль, который импортировали | Смотреть всю цепочку импорта и метаданные зависимостей. |
#Подробная пошаговая диагностика и исправление
- 1. Сохраните исходный tracebackЗапустите тот же скрипт в терминале, где ошибка возникает. Скопируйте последнюю строку с
No module named ...и несколько строк выше. Если импорт былimport PIL, а пакет в менеджере называется Pillow, это не ошибка Python: проверьте указанное автором имя импортируемого модуля.
- 2. Сверьте Python и пакетВыполните команды одним интерпретатором.
python -m pip showпринимает имя установленного дистрибутива, которое может отличаться от текста послеimport.sys.executableпоможет исключить другое окружение.Linux · Терминал (Bash)КомандаPillow — только пример; замените на имя вашего дистрибутива.python -c "import sys; print(sys.executable)"python -m pip show Pillow
- 3. Найдите имя импорта в официальном примере пакетаОткройте документацию установленной библиотеки и найдите образец импорта. Для Pillow нормален
from PIL import Image, аimport Pillowневерен. Не угадывайте имя автоматически из названия в pip; имя иногда относится к нескольким модулям. - Пример только при установленном Pillow; никакие изображения не открываютсяPythonПример только при установленном Pillow; никакие изображения не открываются.
from PIL import Image print(Image.__name__)
- 4. Проверьте конфликт имён файловУбедитесь, что в папке проекта нет своего
PIL.py,requests.py,typing.pyили каталога с совпадающим именем, который перекрывает пакет. Временно переименуйте только свой файл и поправьте импорты; не удаляйте файлы из системногоsite-packages. - Если возвращается None, имя импорта не найдено текущим интерпретаторомPythonЕсли возвращается None, имя импорта не найдено текущим интерпретатором.
import importlib.util print(importlib.util.find_spec("PIL"))
- 5. Исправьте причину и протестируйте цепочкуЕсли отсутствует вложенная зависимость, ознакомьтесь с требованиями и дополнительными возможностями пакета; установите нужный комплект в тестовую среду. После исправления запустите простой импорт, затем целевую функцию проекта на тестовых данных и проверьте весь traceback при новом сбое.
#Как проверить, что проблема устранена
Реальная команда импорта из документации библиотеки выполняется в Python приложения; нет скрытой ошибки во вложенных импортируемых модулях.
#Если исправление не помогло
Если название пакета совпадает с вредоносным похожим пакетом, не устанавливайте первый попавшийся результат. Проверяйте автора и официальный источник дистрибутива.