Fix enum34 error by excluding it in PyInstaller spec
The previous approach of uninstalling enum34 before PyInstaller didn't work because 'uv run' re-syncs dependencies. The proper solution is to exclude enum34 directly in the PyInstaller spec file. Changes: - Added hooks/hook-enum34.py: Custom PyInstaller hook to exclude enum34 - Updated local-transcription.spec: - Added 'hooks' to hookspath - Added 'enum34' to excludes list - Updated build.sh and build.bat: - Removed enum34 uninstall step (no longer needed) - Added comment explaining enum34 is excluded in spec Why this works: - PyInstaller's excludes list prevents enum34 from being bundled - The custom hook provides documentation and explicit exclusion - enum34 can remain installed in venv (won't break anything) - Works regardless of 'uv run' re-syncing dependencies enum34 is an obsolete Python 2.7/3.3 backport that's incompatible with PyInstaller and unnecessary on Python 3.4+ (enum is in stdlib). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -16,11 +16,8 @@ REM Sync dependencies (uses PyTorch CUDA from pyproject.toml)
|
|||||||
echo Installing dependencies with CUDA support...
|
echo Installing dependencies with CUDA support...
|
||||||
uv sync
|
uv sync
|
||||||
|
|
||||||
REM Remove enum34 if present (incompatible with PyInstaller)
|
|
||||||
echo Removing enum34 (if present)...
|
|
||||||
uv pip uninstall -q enum34 2>nul
|
|
||||||
|
|
||||||
REM Build with PyInstaller
|
REM Build with PyInstaller
|
||||||
|
REM Note: enum34 is excluded in local-transcription.spec
|
||||||
echo Running PyInstaller...
|
echo Running PyInstaller...
|
||||||
uv run pyinstaller local-transcription.spec
|
uv run pyinstaller local-transcription.spec
|
||||||
|
|
||||||
|
|||||||
5
build.sh
5
build.sh
@@ -15,11 +15,8 @@ rm -rf build dist
|
|||||||
echo "Installing dependencies with CUDA support..."
|
echo "Installing dependencies with CUDA support..."
|
||||||
uv sync
|
uv sync
|
||||||
|
|
||||||
# Remove enum34 if present (incompatible with PyInstaller)
|
|
||||||
echo "Removing enum34 (if present)..."
|
|
||||||
uv pip uninstall -q enum34 2>/dev/null || true
|
|
||||||
|
|
||||||
# Build with PyInstaller
|
# Build with PyInstaller
|
||||||
|
# Note: enum34 is excluded in local-transcription.spec
|
||||||
echo "Running PyInstaller..."
|
echo "Running PyInstaller..."
|
||||||
uv run pyinstaller local-transcription.spec
|
uv run pyinstaller local-transcription.spec
|
||||||
|
|
||||||
|
|||||||
10
hooks/hook-enum34.py
Normal file
10
hooks/hook-enum34.py
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
"""
|
||||||
|
PyInstaller hook to exclude enum34.
|
||||||
|
|
||||||
|
enum34 is an obsolete backport of Python's enum module for Python 2.7 and 3.3.
|
||||||
|
It is incompatible with Python 3.4+ and PyInstaller.
|
||||||
|
Since we require Python 3.9+, enum is part of the stdlib and enum34 is not needed.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Exclude enum34 completely from the build
|
||||||
|
excludedimports = ['enum34']
|
||||||
@@ -129,10 +129,10 @@ a = Analysis(
|
|||||||
binaries=binaries,
|
binaries=binaries,
|
||||||
datas=datas,
|
datas=datas,
|
||||||
hiddenimports=hiddenimports,
|
hiddenimports=hiddenimports,
|
||||||
hookspath=[],
|
hookspath=['hooks'], # Add hooks directory for custom PyInstaller hooks
|
||||||
hooksconfig={},
|
hooksconfig={},
|
||||||
runtime_hooks=[],
|
runtime_hooks=[],
|
||||||
excludes=[],
|
excludes=['enum34'], # Exclude enum34 - incompatible with PyInstaller and Python 3.4+
|
||||||
win_no_prefer_redirects=False,
|
win_no_prefer_redirects=False,
|
||||||
win_private_assemblies=False,
|
win_private_assemblies=False,
|
||||||
cipher=block_cipher,
|
cipher=block_cipher,
|
||||||
|
|||||||
Reference in New Issue
Block a user