Scenario:
- You want to use Pillow's ImageFile module,
- You are not using tcl, tkinter, or the TkImage class,
- PyInstaller is over-aggressively including all of tcl/tkinter in the dist.
Problem: There isn't clear documentation on the internet of how to actually remove these modules successfully. There's quite a bit of talk on SO with a lot of wrong/non-working advice on how to accomplish this.
Here's a simple spec file showing the changes I made to accomplish this.
Notice in particular two things:
-
hacking sys.modules to remove FixTk
-
The list of modules in Analysis (
excludes=[]
)
# -*- mode: python -*-
block_cipher = None`
import sys
sys.modules['FixTk'] = None
a = Analysis(['kill_tk_test.py'],
pathex=['C:\\code\\kill_tk_test'],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=['FixTk', 'tcl', 'tk', '_tkinter', 'tkinter', 'Tkinter'],
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='kill_tk_test',
debug=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='kill_tk_test')