Skip to content

mpmath 1.4.0 breaks Frozen Applications due to importlib.metadata usage #1044

@FlurinArner

Description

@FlurinArner

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:

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 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugan unexpected problem or unintended behaviortesting

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions