有一個導入解析「問題」與passlib,但我預計它不會fi nd 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像我,你可以添加一個忽略標誌的進口旁:
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
#=============================================================================
這將確保進口解決過程將看到函數存在,也不會抱怨。