Pyinstaller compile to exe

13,554

Solution 1

If you are still having this issue, here is what solved it for me:

pip install --upgrade setuptools

I've tried installing six (in my case, it wasn't already installed), but since it seems that it is looking for _vendor.six and not just six, that didn't solve it. Somehow, upgrading setuptools solves it.

Solution 2

I had a similar error when trying to compile my script to a macho using pyinstaller. I tried uninstalling/reinstalling six and setuptools as suggested elsewhere to no effect. I noticed another error regarding enum and tried uninstalling enum34 via pip. This did it.

pip uninstall enum34

Solution 3

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.

Solution 4

Despite upgrading the setuptools, Uninstalling and reinstalling works for me.

conda uninstall setuptools

and then

conda install setuptools

Solution 5

I have faced some similar error when I use pyinstaller. And part of my error message are showed following:

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'

When I scroll up this message, I found this:

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

So I turned to install the module six. And when I installed it, my pyinstaller could run successfully.

Hope this can help you.

Share:
13,554
Tbaker
Author by

Tbaker

VBA, Python, BI

Updated on July 22, 2022

Comments

  • Tbaker
    Tbaker almost 2 years

    I am trying to compile a Kivy application to a windows exe, but I keep receiving an attribute error: AttributeError: 'str' object has no attribute 'items'

    I have compiled other applications, and followed the instructions line for line per the kivy page (completing the demo), but when I try to do the same to my application I receive the above error. I'm not sure where to go I've been trying for several hours now and I can't seem to make any headway. Any help would be greatly appreciated.

    Edit: Below is the tail of the stack trace, the whole thing is long and so I pasted in what I think may be relevant, but frankly I'm a bit out of my depth here :)

    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'
    

    My Spec:

    # -*- 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')
    

    EDIT: Apparently it has nothing to do with Kivy as I have rewritten the front end to use TKinter and i'm still having the issue.