Description
Description
When installing packages from a registry which supports PEP658, pip install
produces an error if the user tries to install a package using its non-normalized name.
For example, testing here with the fluffy-server
package using an underscore instead of a hyphen:
$ pip install -i http://localhost:7777/simple fluffy_server
Looking in indexes: http://localhost:7777/simple
Collecting fluffy_server
Obtaining dependency information for fluffy_server from http://localhost:7777/packages/fluffy_server-1.39.2-py3-none-any.whl.metadata
Downloading http://localhost:7777/packages/fluffy_server-1.39.2-py3-none-any.whl.metadata (727 bytes)
Discarding http://localhost:7777/packages/fluffy_server-1.39.2-py3-none-any.whl (from http://localhost:7777/simple/fluffy-server/): Requested fluffy_server from http://localhost:7777/packages/fluffy_server-1.39.2-py3-none-any.whl has inconsistent Name: expected 'fluffy_server', but metadata has 'fluffy-server'
ERROR: Could not find a version that satisfies the requirement fluffy_server (from versions: 1.39.2)
ERROR: No matching distribution found for fluffy_server
Package name variants like fluffy_server
, FLUFFY-SERVER
, etc. all fail. Only the normalized name fluffy-server
succeeds.
Expected behavior
pip should allow installing using the non-normalized package name as it will be very confusing for users otherwise.
pip version
Tested with 23.1.2 and current main
Python version
3.11
OS
Linux (debian bullseye)
How to Reproduce
I have created a minimal reproduction PEP503 static file registry here which you can easily test with: https://github.com/chriskuehl/pip-pep658-normalization-bug-repro
- Clone the repo
- Start a static file server at the repo root, e.g.
python3 -m http.server 7777
- Try to install the package with
pip install -i http://localhost:7777/simple fluffy_server
and observe the error from above.
This can also be reproduced using pypi.org
, however you need to use the PEP503 (HTML /simple/
files) rather than the new JSON format. I could not find a built-in option to ask pip to use the HTML index, but if you comment out these two lines and force pip to use text/html
, you can see that pip discards the wheel and installs from the sdist instead:
$ pip install fluffy_server
Collecting fluffy_server
Obtaining dependency information for fluffy_server from https://files.pythonhosted.org/packages/f0/38/4e40f319819da80719c4ab791250f2db752f55c5f0f9450d81a84a618922/fluffy_server-1.39.2-py3-none-any.whl.metadata
Downloading fluffy_server-1.39.2-py3-none-any.whl.metadata (727 bytes)
Discarding https://files.pythonhosted.org/packages/f0/38/4e40f319819da80719c4ab791250f2db752f55c5f0f9450d81a84a618922/fluffy_server-1.39.2-py3-none-any.whl#sha256=cfa5516c13c98b17898348c7f12c6953c01965c8fdec690b70b0fab4936949c5 (from https://pypi.org/simple/fluffy-server/) (requires-python:>=3.10): Requested fluffy_server from https://files.pythonhosted.org/packages/f0/38/4e40f319819da80719c4ab791250f2db752f55c5f0f9450d81a84a618922/fluffy_server-1.39.2-py3-none-any.whl#sha256=cfa5516c13c98b17898348c7f12c6953c01965c8fdec690b70b0fab4936949c5 has inconsistent Name: expected 'fluffy_server', but metadata has 'fluffy-server'
Downloading fluffy-server-1.39.2.tar.gz (97 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 97.3/97.3 kB 1.3 MB/s eta 0:00:00
Preparing metadata (setup.py) ... done
Code of Conduct
- I agree to follow the PSF Code of Conduct.