Search code examples
pythonwindowspython-3.xpywin32

pyinstaller not reading my hook file and doesn't work with win32com.shell


According to the docs of pyinstaller, if you name a file hook-fully.qualified.import.name.py it will read this file whenever you do an import of the matching .py file.

However, my script looks like this:

import pythoncom
from win32com.shell import shell
from win32com import storagecon
...

And pyinstaller refuses to recognize win32com.shell with the following error: ImportError: No module named 'win32com.shell'. So I've created hook-win32com.shell.py with the following code:

hiddenimports = [
    'win32com.shell.shell',
]

pyinstaller never reads this file, however it does read hook-win32com.py so I've also tried with just adding `'win32com.shell' to the above hook file but that didn't do much.

  1. How do I get pyinstaller to read my hook file
  2. How do I get it to include win32com.shell? (So i get rid of "No module named" in runtime of the .exe)

Solution

  • This seems to be the case with: https://github.com/pyinstaller/pyinstaller/issues/1322

    Apparently the new python3 graph is now used everywhere in pyinstaller, so this bug seems to apply for python2 users as well.

    I suggest rewriting win32com.shell calls with ctypes.shell32, or cffi.