pyinstaller:包括密钥环模块?
pyinstaller: include keyring module?
我编写了一个小型 python 应用程序,使用密钥环模块(用于将密码存储在 windows 凭据库中)和 wxpython 自动将用户登录到特定服务登录图形用户界面。
此服务的登录工具不支持登录凭据的存储,但有一个我在脚本中使用的 cmd 登录方法。
脚本现已完成并且运行良好,但我想将其作为 exe 部署到其他几个系统。
Keyring 似乎不能很好地与 pyinstaller 配合使用,但我至少在添加了大量隐藏导入后让我的程序启动:
'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 凭证库来存储密码。
谢谢!
Python:2.7.9
py安装程序:2.1
钥匙圈:5.6
pywin:构建 219
即使在此处和 pyinstaller 上发帖后一周也没有成功,但我做出了自己的解决方案 github。
我放弃了密钥环模块并使用 win32crypt 模块来使用 windows 函数 CryptProtectData,经过一些研究后它使用与密钥环相同的保护。
我将密码散列为存储在用户 appdata 文件夹中的字符串,并在需要时对其进行解密。这很好用,应该与密钥环方法一样安全,因为它只能从同一用户解密,重置密码以获取访问权限也不会起作用。对我来说足够安全。
当然这适用于 pyinstaller。
我编写了一个小型 python 应用程序,使用密钥环模块(用于将密码存储在 windows 凭据库中)和 wxpython 自动将用户登录到特定服务登录图形用户界面。 此服务的登录工具不支持登录凭据的存储,但有一个我在脚本中使用的 cmd 登录方法。
脚本现已完成并且运行良好,但我想将其作为 exe 部署到其他几个系统。
Keyring 似乎不能很好地与 pyinstaller 配合使用,但我至少在添加了大量隐藏导入后让我的程序启动:
'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 凭证库来存储密码。
谢谢!
Python:2.7.9 py安装程序:2.1 钥匙圈:5.6 pywin:构建 219
即使在此处和 pyinstaller 上发帖后一周也没有成功,但我做出了自己的解决方案 github。 我放弃了密钥环模块并使用 win32crypt 模块来使用 windows 函数 CryptProtectData,经过一些研究后它使用与密钥环相同的保护。
我将密码散列为存储在用户 appdata 文件夹中的字符串,并在需要时对其进行解密。这很好用,应该与密钥环方法一样安全,因为它只能从同一用户解密,重置密码以获取访问权限也不会起作用。对我来说足够安全。
当然这适用于 pyinstaller。