Summary
mpmath 1.4.0 breaks frozen applications (PyInstaller, py2app, cx_Freeze, Nuitka) by switching from hardcoded version strings to dynamic lookup via importlib.metadata.version().
Root Cause
mpmath 1.4.0 (mpmath/__init__.py L1-2):
from importlib.metadata import version
__version__ = version(__name__)
Previous versions (1.2.1, 1.3.0):
__version__ = '1.3.0' # Hardcoded
Problem: Frozen applications bundle Python code but not package metadata (.dist-info directories), causing importlib.metadata.version() to fail with PackageNotFoundError.
Minimal Reproduction
Simulate frozen app behavior without requiring PyInstaller:
#!/usr/bin/env python3
"""Simulates frozen app behavior where package metadata is unavailable"""
import importlib.metadata
# Mock metadata to simulate frozen environment
original_version = importlib.metadata.version
def mock_version(package_name):
if package_name == "mpmath":
raise importlib.metadata.PackageNotFoundError(
f"No package metadata was found for {package_name}"
)
return original_version(package_name)
importlib.metadata.version = mock_version
import mpmath # ✗ FAILS on 1.4.0
print(f"mpmath version: {mpmath.__version__}")
Workarounds
Downgrade to mpmath 1.3.0:
pip install mpmath==1.3.0
or in Poetry:
Proposed Solution
Use a fallback for when metadata is unavailable:
try:
from importlib.metadata import version
__version__ = version(__name__)
except Exception:
# Fallback for frozen apps or when metadata unavailable
__version__ = "1.4.0" # Update this string in each release
Environment
- mpmath: 1.4.0
- Python: 3.10
- expected on all 3.9+ versions supported by mpmath 1.4.0
- Freezing tools: PyInstaller 5.4.1
- expected on all others also (py2app, cx_Freeze, Nuitka)
- OS: Windows
Summary
mpmath 1.4.0 breaks frozen applications (PyInstaller, py2app, cx_Freeze, Nuitka) by switching from hardcoded version strings to dynamic lookup via
importlib.metadata.version().Root Cause
mpmath 1.4.0 (
mpmath/__init__.pyL1-2):Previous versions (1.2.1, 1.3.0):
Problem: Frozen applications bundle Python code but not package metadata (
.dist-infodirectories), causingimportlib.metadata.version()to fail withPackageNotFoundError.Minimal Reproduction
Simulate frozen app behavior without requiring PyInstaller:
Workarounds
Downgrade to mpmath 1.3.0:
or in Poetry:
Proposed Solution
Use a fallback for when metadata is unavailable:
Environment