Нет модуля с именем "passlib"
Как исправить
from passlib.hash import sha256_crypt ImportError: Нет модуля с именем "passlib"
Я уже установил в использовании pip install passlib и он говорит
Требование уже выполнено (используйте --upgrade для обновления): passlib в c:\python34\lib\site-packages Очистка...
Как вы это исправите
Спасибо
2 ответа
Существует проблема разрешения импорта с помощью passlib, но я ожидал, что он не найдет sha256_crypt вместо того, чтобы не найти passlib. Во-первых, я хотел бы убедиться, что на вашей машине правильно установлен модуль passlib. Во-вторых, я бы попытался запустить программу с ошибкой и посмотреть, можно ли запустить что-то вроде:
sha256_crypt.encrypt("someString")
Если это выполняется, то единственной "проблемой" является то, что разрешение импорта является статическим и оно не может разрешать функции, которые не определены во время выполнения. Это будет иметь смысл, если вы посмотрите на hash.py из passlib.
# NOTE: could support 'non-lazy' version which just imports
# all schemes known to list_crypt_handlers()
#=============================================================================
# import proxy object and replace this module
#=============================================================================
from passlib.registry import _proxy
import sys
sys.modules[__name__] = _proxy
#=============================================================================
# eoc
#=============================================================================
Как видите, sha256_crypt здесь не определен, поэтому импорт возвращается как неправильный, даже если модуль будет загружаться правильно во время выполнения!
У вас есть два варианта на данный момент. Если вы используете PyDev, как я, вы можете добавить флаг игнорирования рядом с импортом:
from passlib.hash import sha256_crypt #@UnresolvedImport
Вы также можете изменить hash.py так, чтобы вы определили функцию-заполнитель sha256_crypt, чтобы гарантировать, что импорт возвращается как допустимый, но на самом деле это не лучший подход, но он работает:
# NOTE: could support 'non-lazy' version which just imports
# all schemes known to list_crypt_handlers()
#=============================================================================
# import proxy object and replace this module
#=============================================================================
def sha256_crypt():
pass
from passlib.registry import _proxy
import sys
sys.modules[__name__] = _proxy
#=============================================================================
# eoc
#=============================================================================
Это гарантирует, что процесс разрешения импорта увидит, что функция существует, и не будет жаловаться.
Возможно, у вас есть виртуальная среда и вы установили в нее свои модули, но IDE запустили в глобальной среде. См. следующий ответ , который решил эту проблему для меня.