2025, Sep 28 15:17
Почему установленный пакет не импортируется: flask-Humanify против flask_humanify
Статья объясняет, почему Python сообщает ModuleNotFoundError после установки flask-Humanify, и как исправить импорт: используйте модуль flask_humanify.
Python сообщает, что пакет установлен, но импорт падает с ModuleNotFoundError. Если это знакомо, скорее всего, вы столкнулись с классическим несоответствием между именем дистрибутива (как его показывает pip) и реальным именем импортируемого модуля. Ниже — краткое объяснение того, что происходит с flask-Humanify, и как быстро это исправить.
Проблема
Вы устанавливаете пакет, и pip подтверждает успешную установку:
/usr/local/bin/python3.6 -m pip install flask_Humanify
Интерпретатор и pip явно используют одну и ту же версию:
/usr/local/bin/python3.6 --version
Python 3.6.3
/usr/local/bin/python3.6 -m pip --version
pip 21.3.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
pip list -v
...
flask-Humanify         0.2.3 /usr/local/lib/python3.6/site-packages pip
...
Но запуск кода завершается ошибкой импорта:
/usr/local/bin/python3.6 test.py
Traceback (most recent call last):
  File "once.py", line 29, in <module>
    from flask_Humanify import Humanify
ModuleNotFoundError: No module named 'flask_Humanify'
Минимальный воспроизводимый пример
Строка импорта ниже воспроизводит проблему. Локальный псевдоним произволен и на поведение не влияет; сбой вызван путём к модулю.
# test_app.py
from flask_Humanify import Humanify as HumanifyAlias
Почему так происходит
В импортах важен регистр. Установленный дистрибутив называется flask-Humanify, а импортируемый модуль — flask_humanify. Этого различия достаточно, чтобы получить ModuleNotFoundError при использовании варианта со смешанным регистром и подчёркиванием после Flask. Проверка установленных файлов это наглядно подтверждает. Вывод списка файлов через pip показывает, что корневая папка пакета — в нижнем регистре и с подчёркиванием:
$ py3/scripts/pip show flask-Humanify --files
Name: flask-Humanify
Version: 0.2.3
...
Files:
  flask_humanify-0.2.3.dist-info\INSTALLER
  flask_humanify-0.2.3.dist-info\METADATA
  flask_humanify-0.2.3.dist-info\RECORD
  flask_humanify-0.2.3.dist-info\REQUESTED
  flask_humanify-0.2.3.dist-info\WHEEL
  flask_humanify-0.2.3.dist-info\licenses\LICENSE
  flask_humanify-0.2.3.dist-info\top_level.txt
  flask_humanify\__init__.py
  flask_humanify\humanify.py
  ...
Переход на правильное имя модуля сразу устраняет ошибку. Это расхождение видно и в интерактивной сессии ниже:
>>> from flask_Humanify import Humanify
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'flask_Humanify'
>>> from flask_humanify import Humanify
>>>
Легко запутаться, ведь в документации встречается та же опечатка, из‑за чего неверная форма выглядит правдоподобно.
Решение
Импортируйте класс из правильного модуля — функциональность останется прежней. Псевдоним необязателен, он здесь лишь для отличия локального имени.
# fixed_test_app.py
from flask_humanify import Humanify as HumanifyAlias
Как быстро проверить
Если вы не уверены в пути импорта, быстро подтвердить его можно, посмотрев установленные файлы через pip. Команда ниже позволяет увидеть имя верхнеуровневого пакета и убедиться, что это flask_humanify:
.../pip show --files flask-Humanify
Достаточно найти в этом выводе имя каталога пакета — оно и укажет верный путь для импорта.
Почему это важно
Путаница между именем дистрибутива и именем модуля — частая причина ModuleNotFoundError, особенно когда в одном месте проект использует смешанный регистр или знаки препинания, а в пути импорта — другой стиль. В этом случае дополнительную путаницу вносит README пакета с неверной строкой импорта. Верное указание пути экономит время и избавляет от ненужных манипуляций с окружением.
Есть и практический мета-урок из вывода установки: запускать pip от root не рекомендуется, предупреждение прямо советует использовать виртуальное окружение. Хотя это и не причина текущей ошибки, напоминание полезное для повседневной работы с Python.
Итоги
Если Python утверждает, что пакет установлен, но импорт не работает, проверяйте имя импортируемого модуля, а не название дистрибутива. Для flask-Humanify правильный путь импорта — flask_humanify, а нужный класс внутри — Humanify. Быстрая проверка pip show --files точно подскажет, какой верхнеуровневый каталог нужно импортировать. Следите за регистром, ориентируйтесь на то, что показывает pip о составе установки, и, как советует установщик, работайте в виртуальном окружении.