Pyinstaller编译成可执行文件

7

我正在尝试将一个Kivy应用程序编译为Windows可执行文件,但是我一直收到一个属性错误:

AttributeError: 'str'对象没有属性“items”

我已经编译了其他应用程序,并按照kivy页面(完成演示)逐行遵循说明,但是当我尝试对我的应用程序执行相同操作时,出现了上述错误。我不确定该去哪里,我已经尝试了几个小时了,似乎无法有所进展。任何帮助都将不胜感激。

编辑: 以下是堆栈跟踪的末尾,整个堆栈跟踪很长,因此我粘贴了我认为可能与此错误相关的部分,但是说实话,我在这里已经有点力不从心了 :)

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,但仍然存在问题。

3
你正在尝试运行的命令,你得到的输出,截图或任何其他信息都会有所帮助。 - Alyssa Haroldsen
我的猜测是你有一个字符串,你认为它是一个字典... - Joran Beasley
抱歉,我不确定该提供什么帮助。 - Tbaker
我正在尝试运行的命令是:python -m PyInstaller face.spec - Tbaker
@JoranBeasley 这个Python脚本没有使用任何字典,并且如果我通过Kivy运行它,它可以正常工作。但是当我尝试通过PyInstaller创建exe文件时出现错误。我已经重新安装了Kivy、PyInstaller,并清理了所有可用的信息,但还没有找到解决方法。 - Tbaker
问题肯定与第六个模块有关,这里有一些信息:https://github.com/pyinstaller/pyinstaller/pull/1548,但是没有解决我的问题。 - Tbaker
8个回答

20

如果您仍然遇到此问题,以下是解决方法:

pip install --upgrade setuptools
我尝试过安装six(在我的情况下,它还没有被安装),但似乎它正在寻找_vendor.six而不仅仅是six,所以那样做并没有解决问题。一些方式,升级setuptools可以解决这个问题。

7

当我尝试使用pyinstaller将我的脚本编译为macho时,遇到了类似的错误。我尝试按照其他建议卸载/重新安装six和setuptools,但没有效果。我注意到另一个关于枚举的错误,并尝试通过pip卸载enum34。这样就解决了问题。

pip uninstall enum34

4

Things to check:

  • Check the output above the stated error. Sometimes some moudles required might not have been installed. Make sure that all modules are installed and no prior errors.
  • Upgrade setup tools using command :

    pip install --upgrade setuptools
    
  • Unistall and re-install modules like six, setuptools, pyinstaller also helps in some cases.

2
尽管升级了setuptools,但是对我来说卸载和重新安装起作用。
conda uninstall setuptools

然后

conda install setuptools

虽然我没有使用conda,所以我不得不手动删除该软件包,但卸载并重新安装setuptools是解决方案。 - H S Rathore

1

当我使用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

所以我转向安装模块six。当我安装它时,我的pyinstaller能够成功运行。

希望这可以帮到你。


我的问题肯定与六有关,但我已经安装了它,似乎不能解决问题,谢谢! :) - Tbaker

0

我在一个wxPython项目中使用Pyinstaller时遇到了类似的错误输出。通过将setuptools升级(从38.5.1到39.0.2),问题得到了解决。


0

我通过安装一些依赖项来解决了这个问题。

pip install --force-reinstall --no-binary :all: pyinstaller

这里是源问题 link


0
pip install --force-reinstall --no-binary :all: pyinstaller

对我来说起作用了,但只有在以管理员身份运行命令提示符时才有效...(Win10)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接