simion / pip-upgrader

An interactive pip requirements upgrader. It also updates the version in your requirements.txt file.
Apache License 2.0
512 stars 35 forks source link

Python 3.12 removed pkgutil.ImpImporter #51

Open lsteeger opened 1 month ago

lsteeger commented 1 month ago

After upgrade to Python 3.12, pip-upgrade fails as follows:

pip-upgrade
Traceback (most recent call last):
  File "./.venv/bin/pip-upgrade", line 5, in <module>
    from pip_upgrader.cli import main
  File "./.venv/lib/python3.12/site-packages/pip_upgrader/__init__.py", line 1, in <module>
    import pkg_resources
  File "./.venv/lib/python3.12/site-packages/pkg_resources/__init__.py", line 2191, in <module>
    register_finder(pkgutil.ImpImporter, find_on_path)
                    ^^^^^^^^^^^^^^^^^^^

From Python 3.11 doc:

class pkgutil.ImpImporter(dirname=None)

    [PEP 302](https://peps.python.org/pep-0302/) Finder that wraps Python’s “classic” import algorithm.

    If dirname is a string, a [PEP 302](https://peps.python.org/pep-0302/) finder is created that searches
that directory. If dirname is None, a [PEP 302](https://peps.python.org/pep-0302/) finder is created that
searches the current [sys.path] (https://docs.python.org/3.11/library/sys.html#sys.path),
plus any modules that are frozen or built-in.

    Note that [ImpImporter](https://docs.python.org/3.11/library/pkgutil.html#pkgutil.ImpImporter) does
not currently support being used by placement on
[sys.meta_path](https://docs.python.org/3.11/library/sys.html#sys.meta_path).

    Deprecated since version 3.3: This emulation is no longer needed, as the standard import mechanism
is now fully [PEP 302](https://peps.python.org/pep-0302/) compliant and available in
[importlib](https://docs.python.org/3.11/library/importlib.html#module-importlib).

Apparently the deprecation has now become a removal.