Pyinstaller编译为exe

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pyinstaller编译为exe相关的知识,希望对你有一定的参考价值。

我试图将一个Kivy应用程序编译到一个Windows exe,但我一直收到一个属性错误:AttributeError:'str'对象没有属性'items'

我已经编译了其他应用程序,并按照kivy page的行说明行(完成演示),但是当我尝试对我的应用程序执行相同操作时,我收到上述错误。我不知道该去哪里我已经尝试了好几个小时了,我似乎无法取得任何进展。任何帮助将不胜感激。

编辑:下面是堆栈跟踪的尾部,整个事情很长,所以我粘贴在我认为可能相关的内容中,但坦率地说,我有点超出我的深度:)

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,这并没有解决它。不知何故,升级setuptools解决了它。

另一答案

尝试使用pyinstaller将我的脚本编译为一个男子汉时,我遇到了类似的错误。我尝试卸载/重新安装六个和setuptools按照别处的建议无效。我注意到有关枚举的另一个错误,并尝试通过pip卸载enum34。这样做了。

pip uninstall enum34
另一答案

要检查的事项: - 检查输出高于规定的错误。有时可能没有安装一些所需的模块。确保已安装所有模块且没有先前的错误。 - 使用命令升级设置工具: pip install --upgrade setuptools - Unistall和重新安装模块,如六,setuptools,pyinstaller在某些情况下也有帮助。

另一答案

当我使用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可以成功运行。

希望这可以帮到你。

另一答案

尽管升级了setuptools,卸载并重新安装它对我有用。

conda uninstall setuptools

然后

conda install setuptools
另一答案

我有一个来自Pyinstaller的类似错误输出与wxPython项目。通过升级setuptools(从38.5.1到39.0.2)解决了这个问题。

以上是关于Pyinstaller编译为exe的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pyinstaller 包含文件?

如何将 .NET EXE 反编译为可读的 C# 源代码?

将 EXE 反编译为 ASM

VC将同一份代码同时编译为Dll和Exe的方法

将 .py 编译为 .exe 后出现错误

如何将文件 .cpp 编译为带有压缩功能的 exe? [关闭]