2015-11-11 49 views
0

我寫了一個小型的python應用程序,使用鑰匙環模塊(用於在Windows憑證保險庫中存儲密碼)和wxpython登錄gui,自動將用戶登錄到特定服務。 此服務的登錄工具不支持存儲登錄憑據,但具有我在腳本中使用的cmd登錄方法。pyinstaller:包含鑰匙圈模塊?

該腳本現在已經完成並且工作完美,但是我想將這個exe部署到其他幾個系統。

鑰匙扣似乎不玩pyinstaller不錯,但我得到了我的程序追加一個巨大的隱患進口的名單之後開始ATLEAST:

'json', 
'json.decoder', 
'json.encoder', 
'json.scanner', 
'keyring.backends.file', 
'keyring.backends.Gnome', 
'keyring.backends.Google', 
'keyring.backends.keyczar', 
'keyring.backends.kwallet', 
'keyring.backends.multi', 
'keyring.backends.OS_X', 
'keyring.backends.pyfs', 
'keyring.backends.SecretService', 
'keyring.backends.Windows', 
'keyring.backends._win_crypto', 
'keyring.util.escape', 
'keyring.util.XDG', 
'keyring.credentials' 

與那些應用程序啓動,而不會錯過模塊,但它仍然是任何錯誤它試圖在崩潰訪問憑證保險庫:

c:\PY\novell_login>dist\thread_test\thread_test.exe 
Logging in User: test 
Traceback (most recent call last): 
    File "c:\PY\build\thread_test\out00-PYZ.pyz\wx._core", line 16766, in <lambda> 
    File "<string>", line 119, in LongTaskDone 
    File "c:\PY\build\thread_test\out00-PYZ.pyz\keyring.core", line 44, in set_password 
    File "c:\PY\build\thread_test\out00-PYZ.pyz\keyring.backends.file", line 87, in set_password 
    File "c:\PY\build\thread_test\out00-PYZ.pyz\keyring.backends.Windows", line 81, in encrypt 
NameError: global name '_win_crypto' is not defined 

我不知道自己還能做些什麼來解決這個... 誰能幫助我正確地包括鑰匙圈或知道一個替代我可以使用。我真的想繼續使用Windows Crendential Vault來存儲密碼。

謝謝!

的Python:2.7.9 pyinstaller:2.1 鑰匙圈:5.6 pywin:建立219

回答

0

沒有成功的一個星期後,甚至在這裏張貼後,在對pyinstaller github上我做了我自己的解決方案。 我放棄了鑰匙環模塊,並使用win32crypt模塊使用Windows函數CryptProtectData,經過一些研究後使用了與鑰匙圈相同的保護。

我將密碼存儲到用戶appdata文件夾中存儲的字符串中,並在需要時對其解密。這個工程很好,應該和keyring方法一樣安全,因爲它只能從同一個用戶解密,重置密碼以獲得訪問權限也不會起作用。對我來說足夠安全。

當然這適用於pyinstaller。