Closed
Description
setuptools version
pip==25.1.1, setuptools==80.9.0
Python version
3.10, 3.11
OS
Windows
Additional environment information
This only happens for Python 3.10 and 3.11, not for 3.9 and 3.12.
Description
Apparently if pip is imported before setuptools, the import of setuptools fails:
PS C:\temp> uv venv .venv_setuptools --python 3.11
Using CPython 3.11.10
Creating virtual environment at: .venv_setuptools
Activate with: .venv_setuptools\Scripts\activate
PS C:\temp> .\.venv_setuptools\Scripts\activate.ps1
(.venv_setuptools) PS C:\temp> uv pip install pip setuptools
Using Python 3.11.10 environment at: .venv_setuptools
Resolved 2 packages in 226ms
Installed 2 packages in 244ms
+ pip==25.1.1
+ setuptools==80.9.0
(.venv_setuptools) PS C:\temp> python -c "import pip;import setuptools"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\temp\.venv_setuptools\Lib\site-packages\setuptools\__init__.py", line 21, in <module>
import _distutils_hack.override # noqa: F401
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\temp\.venv_setuptools\Lib\site-packages\_distutils_hack\override.py", line 1, in <module>
__import__('_distutils_hack').do_override()
File "C:\temp\.venv_setuptools\Lib\site-packages\_distutils_hack\__init__.py", line 89, in do_override
ensure_local_distutils()
File "C:\temp\.venv_setuptools\Lib\site-packages\_distutils_hack\__init__.py", line 76, in ensure_local_distutils
assert '_distutils' in core.__file__, core.__file__
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: C:\Users\...\AppData\Roaming\uv\data\python\cpython-3.11.10-windows-x86_64-none\Lib\distutils\core.py
This is even a bigger issue for everyone using the pip-system-certs package (that uses pip as dependency), since it is adding an import hook via a pth file.
That means each interpreter session will automatically have pip imported.
That main reason why it fails is _distutils_hack.DistutilsMetaFinder.spec_for_pip
, which sets method spec_for_distutils
to lambda: None
, so once setuptools is imported the method _distutils_hack.DistutilsMetaFinder.spec_for_distutils
is not called anymore, since it got overwritten before.
Expected behavior
import pip
import setuptools
should be working without error.
How to Reproduce
- Create an empty venv
- Activate venv
- Install
pip
andsetuptools
-
- Call
python -c "import pip;import setuptools"
- Call
Output
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\temp\.venv_setuptools\Lib\site-packages\setuptools\__init__.py", line 21, in <module>
import _distutils_hack.override # noqa: F401
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\temp\.venv_setuptools\Lib\site-packages\_distutils_hack\override.py", line 1, in <module>
__import__('_distutils_hack').do_override()
File "C:\temp\.venv_setuptools\Lib\site-packages\_distutils_hack\__init__.py", line 89, in do_override
ensure_local_distutils()
File "C:\temp\.venv_setuptools\Lib\site-packages\_distutils_hack\__init__.py", line 76, in ensure_local_distutils
assert '_distutils' in core.__file__, core.__file__
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: C:\Users\...\AppData\Roaming\uv\data\python\cpython-3.11.10-windows-x86_64-none\Lib\distutils\core.py