-
Notifications
You must be signed in to change notification settings - Fork 205
Labels
Milestone
Description
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' # HardcodedProblem: 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.0or in Poetry:
mpmath = "1.3.0"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 releaseEnvironment
- 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
Reactions are currently unavailable