windows 没有名为“passlib”的模块

vshtjzan  于 2023-06-07  发布在  Windows
关注(0)|答案(2)|浏览(168)

如何修复
from passlib.hash import sha256_crypt ImportError:没有名为“passlib”的模块
我已经安装了在使用pip安装passlib和它说
已满足要求(使用--upgrade进行升级):在c:\python34\lib\site-packages清理...
你怎么解决这个问题
谢谢

s71maibg

s71maibg1#

passlib有一个导入解析“问题”,但我预计它不会找到sha256_crypt,而不是找不到passlib。首先,我会确保你的机器上正确安装了passlib模块。其次,我会尝试运行错误的程序,看看你是否可以运行这样的程序:

sha256_crypt.encrypt("someString")

如果运行,那么唯一的“问题”是导入解析是静态的,它不能解析在运行时没有定义的函数。如果您从passlib查看www.example.com,这将是有意义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,你可以在import旁边添加一个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
#=============================================================================

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

ctehm74n

ctehm74n2#

您可能有一个虚拟环境,并在其中安装了模块,但在全局环境中启动了IDE。下面的答案为我解决了这个问题。

相关问题