我正在尝试将Kivy应用程序编译为Windows exe,但是我不断收到属性错误:属性错误:"str"对象没有属性"items"
我已经编译了其他应用程序,并按照每个 kivy 页面的说明行(完成演示),但是当我尝试对我的应用程序执行相同的操作时,我收到上述错误。 我不知道该去哪里,我已经尝试了几个小时,但我似乎无法取得任何进展。 任何帮助将不胜感激。
编辑:下面是堆栈跟踪的尾部,整个事情很长,所以我粘贴了我认为可能相关的内容,但坦率地说,我在这里有点不深入:)
6363 WARNING: stderr: File "c:python27libsite-packagesPyInstallerdependa
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:python27libsite-packagesPyInstallerhookspre_safe_import_module
hook-six.moves.py", line 55, in pre_safe_import_module
6378 WARNING: stderr: File "c:python27libsite-packagesPyInstallerhookspr
e_safe_import_modulehook-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
,这并没有解决它。不知何故,升级安装工具可以解决它。
尝试使用 pyinstaller 将脚本编译为男子气概时,我遇到了类似的错误。我尝试按照其他地方的建议卸载/重新安装六个和设置工具,但没有效果。我注意到另一个关于枚举的错误,并尝试通过 pip 卸载 enum34。这做到了。
pip uninstall enum34
要检查的事项:
- 检查所述错误上方的输出。有时可能没有安装所需的一些模块。确保已安装所有模块,并且没有先前的错误。
-
使用命令升级安装工具:
pip install --upgrade setuptools
- Unistall 和重新安装模块,如六个、设置工具、pyinstaller 在某些情况下也有帮助。
尽管升级了setuptools
,但卸载和重新安装对我有用。
conda uninstall setuptools
然后
conda install setuptools
我在使用 pyinstaller 时遇到了一些类似的错误。我的部分错误消息如下所示:
File "C:Python27libsite-packagespyinstaller-3.1.1-py2.7.eggPyInstallerdependanalysis.py", line 198, in _safe_import_module
hook_module.pre_safe_import_module(hook_api)
File "C:Python27libsite-packagespyinstaller-3.1.1-py2.7.eggPyInstallerhookspre_safe_import_modulehook-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可以成功运行。
希望这能帮助你。
我在 wxPython 项目中从 Pyinstaller 中获得了类似的错误输出。通过升级安装工具(从 38.5.1 到 39.0.2)解决了这个问题。
我已经通过安装一些依赖项解决了这个问题,
pip install --force-reinstall --no-binary :all: pyinstaller
这是源问题链接
pip install --force-reinstall --no-binary :all: pyinstaller
为我做了这个技巧,但只有在以管理员身份将其运行到命令提示符下时......(Win10)