我在python中创建一个需要存储密钥的应用程序 . 我使用密钥环模块来存储密钥 . 我使用python-2.7和osx 10.8.5与密钥环3.2(easy_install密钥环) . 代码在eclipse上正常运行,但是当我使用py2app将代码转换为应用程序时,它显示错误的MYAPP错误打开控制台终止
import keyring
keyring.set_password("title","section","keys")
res= keyring.get_password("title","section")
我在键入“python setup.py py2app”时包含终端响应废料,同时通过py2app制作dist
byte-compiling /Library/Python/2.7/site-packages/keyring-3.2-py2.7.egg/keyring/__init__.py to keyring/__init__.pyc
creating /Users/fis/Desktop/build/bdist.macosx-10.8-intel/python2.7-semi_standalone/app/collect/keyring
byte-compiling /Library/Python/2.7/site-packages/keyring-3.2-py2.7.egg/keyring/backend.py to keyring/backend.pyc
byte-compiling /Library/Python/2.7/site-packages/keyring-3.2-py2.7.egg/keyring/core.py to keyring/core.pyc
byte-compiling /Library/Python/2.7/site-packages/keyring-3.2-py2.7.egg/keyring/errors.py to keyring/errors.pyc
byte-compiling /Library/Python/2.7/site-packages/keyring-3.2-py2.7.egg/keyring/getpassbackend.py to keyring/getpassbackend.pyc
byte-compiling /Library/Python/2.7/site-packages/keyring-3.2-py2.7.egg/keyring/py27compat.py to keyring/py27compat.pyc
byte-compiling /Library/Python/2.7/site-packages/keyring-3.2-py2.7.egg/keyring/util/__init__.py to keyring/util/__init__.pyc
creating /Users/fis/Desktop/build/bdist.macosx-10.8-intel/python2.7-semi_standalone/app/collect/keyring/util
byte-compiling /Library/Python/2.7/site-packages/keyring-3.2-py2.7.egg/keyring/util/platform_.py to keyring/util/platform_.pyc
byte-compiling /Library/Python/2.7/site-packages/keyring-3.2-py2.7.egg/keyring/util/properties.py to keyring/util/properties.pyc
byte-compiling /Library/Python/2.7/site-packages/pathtools-0.1.2-py2.7.egg/pathtools/__init__.pyc to pathtools/__init__.pyc
creating /Users/fis/Desktop/build/bdist.macosx-10.8-intel/python2.7-semi_standalone/app/collect/pathtools
3 回答
不确定你是否解决了这个问题,但我的Mac上有类似的问题(使用python v2.7.6和py2app v0.9):脚本在命令行运行正常(即
python scriptname.py
),但当我使用py2app
时将其转换为.app
,失败了 .控制台消息让我得出结论,
py2app
不够智能,无法包含keyring.backends
模块中的子模块 . 所以我明确地在那里导入了所有东西,它终于奏效我希望这可以帮助你!
我没有办法在本地尝试这个,这是我最好的猜测:
尝试导入应用程序中实际需要的所有位,包括在“正常”执行期间不会发生的异常
您可能还需要在运行时使用其他一些包来检查,执行以下操作:
您可以看到
import keyring
带来了多少模块,但是由于keyring.set_password(...)
,还有一些模块被引入 .现在,大多数应该是自动的
py2app
,但是可能会遗漏一些运行时依赖性 .这背后的原因是
py2app
在决定包含哪些模块时做了一些棘手的事情 . 假设keyring.set_password()
实际上并未在此阶段运行 . 事实上,如果它确实和set_password
必须有副作用,你会期望py2app
打包一个普通或修改过的模块吗?在setup.py中包含 packages='keyring.backends' 以包含密钥环的所有包 .