如何修复
来自passlib.hash的导入sha256_crypt ImportError:没有命名的模块 ' passlib'
我已经安装了使用pip install passlib 它说
要求已经满足(使用--upgrade升级):passlib in c:\ python34 \ lib \ site-packages清理......
如何解决此问题
感谢
答案 0 :(得分:0)
passlib有一个导入解决方案“问题”,但我预计它找不到sha256_crypt而不是找不到passlib。 首先,我会确保您的计算机上已正确安装了passlib模块。其次,我会尝试运行带有错误的程序,看看你是否可以运行类似的东西:
sha256_crypt.encrypt("someString")
如果运行,那么唯一的“问题”是导入解析是静态的,它无法解析在运行时未定义的函数。如果你从passlib看一下hash.py,这将是有意义的。
# 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,你可以在导入旁边添加一个ignore标志:
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
#=============================================================================
这将确保导入解析过程将看到该函数存在且不会抱怨。