没有名为' passlib'

时间:2015-11-25 11:32:46

标签: windows python-3.4

如何修复

  来自passlib.hash的

导入sha256_crypt ImportError:没有命名的模块   ' passlib'

我已经安装了使用pip install passlib 它说

  

要求已经满足(使用--upgrade升级):passlib in   c:\ python34 \ lib \ site-packages清理......

如何解决此问题

感谢

1 个答案:

答案 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
#=============================================================================

这将确保导入解析过程将看到该函数存在且不会抱怨。