marcelotduarte/cx_Freeze

Please provide support for non-setuptools.extern bundled packages

mgorny opened this issue · 2 comments

mgorny commented

Describe the bug
The package currently uses packaging, importlib_metadata and tomli bundled with setuptools via setuptools.extern package. Setuptools is unbundled on Gentoo, therefore setuptools.extern is not provided and cx_Freeze fails due to missing imports, e.g.:

____________________________________________ ERROR collecting tests/test_winversioninfo.py ____________________________________________
ImportError while importing test module '/tmp/cx_Freeze/tests/test_winversioninfo.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/lib/python3.11/importlib/__init__.py:126: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
tests/test_winversioninfo.py:5: in <module>
    from cx_Freeze.winversioninfo import Version, VersionInfo
cx_Freeze/winversioninfo.py:12: in <module>
    from setuptools.extern.packaging import version as packaging_version
E   ModuleNotFoundError: No module named 'setuptools.extern'

Could you please add support for falling back to the top-level packaging, tomli and importlib_metadata, please?

To Reproduce

git clone https://github.com/marcelotduarte/cx_Freeze
cd cx_Freeze
python -m venv .venv
. .venv/bin/activate
pip install -r requirements-dev.txt

# this is equivalent to Gentoo's unvendoring
pip install jaraco.text more-itertools nspektr ordered-set packaging platformdirs tomli importlib_metadata
rm -r .venv/lib/python3.*/site-packages/setuptools/{extern,_vendor}
find .venv/lib/python3.*/site-packages/setuptools/ -name '*.py' -exec sed -e 's:from \w*[.]\+extern ::' -e 's:\w*[.]\+extern[.]::' -i {} +

python -m pytest

Expected behavior
Tests passing ;-).

Desktop (please complete the following information):

  • Platform information (e.g. Ubuntu Linux 22.04): Gentoo Linux
  • OS architecture (e.g. amd64): amd64
  • cx_Freeze version [e.g. 6.11]: 6.14.8, 2642a25
  • Python version [e.g. 3.10]: 3.11.2

Of course.
Very good "To Reproduce".