我试图将一个Kivy应用程序编译到一个Windows exe,但我一直收到一个属性错误:AttributeError:'str'对象没有属性'items'
我已经编译了其他应用程序,并按照kivy page的行说明行(完成演示),但是当我尝试对我的应用程序执行相同操作时,我收到上述错误。我不知道该去哪里我已经尝试了好几个小时了,我似乎无法取得任何进展。任何帮助将不胜感激。
编辑:下面是堆栈跟踪的尾部,整个事情很长,所以我粘贴在我认为可能相关的内容中,但坦率地说,我有点超出我的深度:)
6363 WARNING: stderr: File "c:\python27\lib\site-packages\PyInstaller\depend\a
nalysis.py", line 198, in _safe_import_module
hook_module.pre_safe_import_module(hook_api)
6375 WARNING: stderr: hook_module.pre_safe_import_module(hook_api)
File "c:\python27\lib\site-packages\PyInstaller\hooks\pre_safe_import_module\
hook-six.moves.py", line 55, in pre_safe_import_module
6378 WARNING: stderr: File "c:\python27\lib\site-packages\PyInstaller\hooks\pr
e_safe_import_module\hook-six.moves.py", line 55, in pre_safe_import_module
for real_module_name, six_module_name in real_to_six_module_name.items():
6388 WARNING: stderr: for real_module_name, six_module_name in real_to_six_m
odule_name.items():
AttributeError: 'str' object has no attribute 'items'
6396 WARNING: stderr: AttributeError: 'str' object has no attribute 'items'
我的规格:
# -*- mode: python -*-
from kivy.deps import sdl2, glew
block_cipher = None
a = Analysis(['face.py'],
pathex=['c:\\Users\\Home\\PycharmProjects\\MSICheck\\Images'],
binaries=None,
datas=None,
hiddenimports=['sqlite3','kivy.app','six','packaging','packaging.version','packaging.specifiers'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='face',
debug=True,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,Tree('c:\\Users\\Home\\PycharmProjects\\MSICheck\\Images\\'),
a.binaries,
a.zipfiles,
a.datas,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
strip=False,
upx=True,
name='face')
编辑:显然它与Kivy无关,因为我已经重写了使用TKinter的前端,我仍然有问题。
如果你还有这个问题,这就解决了我的问题:
pip install --upgrade setuptools
我已经尝试安装六个(在我的情况下,它还没有安装),但因为它似乎正在寻找_vendor.six
而不仅仅是six
,这并没有解决它。不知何故,升级setuptools解决了它。
尝试使用pyinstaller将我的脚本编译为一个男子汉时,我遇到了类似的错误。我尝试卸载/重新安装六个和setuptools按照别处的建议无效。我注意到有关枚举的另一个错误,并尝试通过pip卸载enum34。这样做了。
pip uninstall enum34
要检查的事项: - 检查输出高于规定的错误。有时可能没有安装一些所需的模块。确保已安装所有模块且没有先前的错误。 - 使用命令升级设置工具: pip install --upgrade setuptools - Unistall和重新安装模块,如六,setuptools,pyinstaller在某些情况下也有帮助。
当我使用pyinstaller时,我遇到了一些类似的错误。我的错误消息的一部分显示如下:
File "C:\Python27\lib\site-packages\pyinstaller-3.1.1-py2.7.egg\PyInstaller\depend\analysis.py", line 198, in _safe_import_module
hook_module.pre_safe_import_module(hook_api)
File "C:\Python27\lib\site-packages\pyinstaller-3.1.1-py2.7.egg\PyInstaller\hooks\pre_safe_import_module\hook-six.moves.py", line 55, in pre_safe_import_module
for real_module_name, six_module_name in real_to_six_module_name.items():
AttributeError: 'str' object has no attribute 'items'
当我向上滚动此消息时,我发现了这个:
18611 INFO: Processing pre-find module path hook distutils
20032 INFO: Processing pre-safe import module hook _xmlplus
23532 INFO: Processing pre-safe import module hook six.moves
Traceback (most recent call last):
File "<string>", line 2, in <module>
ImportError: No module named six
所以我转向安装模块六。当我安装它时,我的pyinstaller可以成功运行。
希望这可以帮到你。
尽管升级了setuptools
,卸载并重新安装它对我有用。
conda uninstall setuptools
然后
conda install setuptools
我有一个来自Pyinstaller的类似错误输出与wxPython项目。通过升级setuptools(从38.5.1到39.0.2)解决了这个问题。