PyInstaller failing to include some modules from C:\Python27\Lib
Asked Answered
M

4

10

I've been repeatedly making good PyInstaller executables of a Tkinter utility program, and suddenly this morning the resulting executable fails with a "can't import" error for modules in C:\Python27\Lib, such as "timeit" and "bisect".

The script runs fine on its own. Only the executable has problems.

Any ideas what could have changed to cause this behavior? Or how to force a fix?

[EDIT] Here's the specific error reported by the executable:

Traceback (most recent call last):
  File "<string>", line 35, in <module>
  File "../..\utils\InterpolatedArray.py", line 12, in <module>
    import bisect
ImportError: No module named bisect

When I comment-out the use of this module (to bypass the import of bisect), it next fails on an import of timeit. None of these errors occur when running the script itself.

[EDIT2] Pyinstaller creates the directories it needs (./build and ./dist), and has no permission problems. The pyinstaller build completes without error.

[EDIT3] Here's the build command I'm using:

pyinstaller -F MyMainModule.py
Monkish answered 28/2, 2014 at 19:47 Comment(1)
It would be better to display the exact error message I would think the first place to start is whether or not you have the right permissions in the directory you are building your exe inLousewort
M
15

Found a fix, if not the cause. Here's my updated build line:

pyinstaller --hidden-import=timeit --hidden-import=bisect -F MyMainModule.py

Still not sure why PyInstaller suddenly forgot how to find these two modules (and only these two modules) among over 20 other modules correctly included in the build.

Monkish answered 28/2, 2014 at 20:53 Comment(0)
B
5

I encounter similar issues while packaging a Python script imported openpyxl. Here is my solution.

Step 1: install the python module, openpyxl

$ wine python.exe Scripts/pip.exe install openpyxl

Step 2: add the openpyxl path

Append the openpyxl path (~/.wine/drive_c/Python27/Lib/site-packages) to pathex in the Analysis object in the application spec file (e.g.,ProcessSpreadsheet.spec).

a = Analysis(['ProcessSpreadsheet.py'],
             pathex=['C:\\Python27\\Scripts', '~/.wine/drive_c/Python27/Lib/site-packages'],
             binaries=None,
             datas=None,
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)

Step 3: rebuild

$ wine pyinstaller.exe ProcessSpreadsheet.spec

Refer to here for the detailed description.

Bignonia answered 24/2, 2016 at 14:46 Comment(0)
D
0

For unix/linux users, make sure the that you are referencing the same packages when compiling as the application do. This issue mainly occurs when using a virtual environment. For that purpose spot the installed package folder and edit the myapp.spec. Then run

pyinstaller myapp.spec
Denticulation answered 7/11, 2019 at 10:10 Comment(0)
B
-1

I found that pyinstaller and PyInstaller differ in this. Use PyInstaller when non standard modules/libraries should be included in the executable. PyInstaller needs to be installed using pip/pip3 (I'm unning MacOS) Then just run: PyInstaller -F <script.py>

Bumf answered 20/2, 2023 at 13:35 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.