我有一个用Python编写的代码,我使用passlib.hash
,sha256_crypt
对密码进行哈希处理,然后使用相同的库验证密码。
我可以使用控制台运行代码,即使用.py
。
使用py2exe
编译此程序时出现问题:
ImportError: No module named passlib.hash
我使用以下命令导入模块:
from passlib.hash import sha256_crypt
有时我会看到一条警告,说明GUI中没有名为sha256_crypt
的模块,但程序仍能正常运行。
我使用的是Windows 7,无法找到解决此问题的方法。我在安装passlib-1.6.1时检查了我的python主目录,在passlib-1.6.1-py2.7.egg
下创建了C:\Python2.7.5\Lib\site-packages
文件,但是没有名为passlib/hash
或sha_256
的文件。
答案 0 :(得分:2)
为了仅加载已明确请求的哈希,Passlib会播放动态导入技巧:passlib.hash
实际上是一个特殊对象,只在请求时导入每个哈希类 。真正的hasher类实际上存储在passlib的内部包passlib.handlers
中的模块中(特别是passlib.hash:sha256_crypt
实际存储在passlib.handlers.sha2_crypt:sha256_crypt
下)。
我不肯定这会解决您的问题,但我所知道的最简单的解决方案是告诉py2exe包含整个passlib
包,而不是试图“猜测”应该包含哪些部分。这可以通过将"passlib"
添加到py2exe的packages
选项...
setup(
# ... other stuff ...
options={
"py2exe":{
# ... other stuff ...
"packages": ["passlib"],
}
}
)
答案 1 :(得分:2)
Eli Collins实际上是正确的,并指出了我正确的方向。
您可以通过更具体地键入导入来解决您的问题。
我通过将导入更改为这样来解决了我的sha512
问题
from passlib.handlers.sha2_crypt import sha512_crypt
我的py2exe
发布现在效果非常好。
我知道这对你来说有点晚了,但它仍然可以帮助某人,就像它帮助了我一样。感谢你提出这个问题并赞扬了Eli!