2015-11-25 130 views
1

如何解決無模塊名爲 'passlib'

from passlib.hash import sha256_crypt ImportError: No module named 'passlib'

我已經安裝在使用PIP安裝passlib 和它說

Requirement already satisfied (use --upgrade to upgrade): passlib in c:\python34\lib\site-packages Cleaning up...

你如何解決這個問題

感謝

回答

0

有一個導入解析「問題」與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 
#============================================================================= 

這將確保進口解決過程將看到函數存在,也不會抱怨。