astral-sh / uv

An extremely fast Python package and project manager, written in Rust.
https://docs.astral.sh/uv
Apache License 2.0
19.95k stars 591 forks source link

`uv pip compile --universal` resolves to wrong `python_full_version` specifier on `python3.8` #6412

Closed ungrichtepfl closed 1 week ago

ungrichtepfl commented 3 weeks ago

Happens with uv version 0.3.1 on a Ubuntu 20.04.6 LTS x86_64 machine.

Steps to reproduce.

  1. Create a python3.8 virtualenv
    python3.8 -m venv venv
  2. Create requirements.in
    coverage[toml]
    pandas
    matplotlib
  3. Run uv pip compile in the virtualenv:
    uv pip compile --universal -o requirements.txt requirements.in
  4. This generates:
    # This file was autogenerated by uv via the following command:
    #    uv pip compile --universal -o requirements-py38.txt requirements.in
    contourpy==1.1.1
    # via matplotlib
    coverage==7.6.1
    # via -r requirements.in
    cycler==0.12.1
    # via matplotlib
    fonttools==4.53.1
    # via matplotlib
    importlib-resources==6.4.4 ; python_full_version < '3.10'
    # via matplotlib
    kiwisolver==1.4.5
    # via matplotlib
    matplotlib==3.7.5
    # via -r requirements.in
    numpy==1.24.4 ; python_full_version < '3.12'
    # via
    #   contourpy
    #   matplotlib
    #   pandas
    numpy==1.26.4 ; python_full_version >= '3.12'
    # via
    #   contourpy
    #   matplotlib
    #   pandas
    packaging==24.1
    # via matplotlib
    pandas==2.0.3
    # via -r requirements.in
    pillow==10.4.0
    # via matplotlib
    pyparsing==3.1.2
    # via matplotlib
    python-dateutil==2.9.0.post0
    # via
    #   matplotlib
    #   pandas
    pytz==2024.1
    # via pandas
    six==1.16.0
    # via python-dateutil
    tomli==2.0.1 ; python_full_version == '3.11'
    # via coverage
    tzdata==2024.1
    # via pandas
    zipp==3.20.0 ; python_full_version < '3.10'
    # via importlib-resources

    For which the third to last entry (tomli) is wrong:

    tomli==2.0.1 ; python_full_version == '3.11'
    # via coverage

    converage needs tomli for python < 3.11.

Running the same uv binary in a python3.9 virtualenv however, generates the correct python specifier:

# This file was autogenerated by uv via the following command:
#    uv pip compile --universal -o requirements-py39.txt requirements.in
contourpy==1.2.1
    # via matplotlib
coverage==7.6.1
    # via -r requirements.in
cycler==0.12.1
    # via matplotlib
fonttools==4.53.1
    # via matplotlib
importlib-resources==6.4.4 ; python_full_version < '3.10'
    # via matplotlib
kiwisolver==1.4.5
    # via matplotlib
matplotlib==3.9.2
    # via -r requirements.in
numpy==2.0.1
    # via
    #   contourpy
    #   matplotlib
    #   pandas
packaging==24.1
    # via matplotlib
pandas==2.2.2
    # via -r requirements.in
pillow==10.4.0
    # via matplotlib
pyparsing==3.1.2
    # via matplotlib
python-dateutil==2.9.0.post0
    # via
    #   matplotlib
    #   pandas
pytz==2024.1
    # via pandas
six==1.16.0
    # via python-dateutil
tomli==2.0.1 ; python_full_version <= '3.11'
    # via coverage
tzdata==2024.1
    # via pandas
zipp==3.20.0 ; python_full_version < '3.10'
    # via importlib-resources

Also, running it without the --universal flag generates a correct requirements.txt:

# This file was autogenerated by uv via the following command:
#    uv pip compile -o requirements.txt requirements.in
contourpy==1.1.1
    # via matplotlib
coverage==7.6.1
    # via -r requirements.in
cycler==0.12.1
    # via matplotlib
fonttools==4.53.1
    # via matplotlib
importlib-resources==6.4.4
    # via matplotlib
kiwisolver==1.4.5
    # via matplotlib
matplotlib==3.7.5
    # via -r requirements.in
numpy==1.24.4
    # via
    #   contourpy
    #   matplotlib
    #   pandas
packaging==24.1
    # via matplotlib
pandas==2.0.3
    # via -r requirements.in
pillow==10.4.0
    # via matplotlib
pyparsing==3.1.2
    # via matplotlib
python-dateutil==2.9.0.post0
    # via
    #   matplotlib
    #   pandas
pytz==2024.1
    # via pandas
six==1.16.0
    # via python-dateutil
tomli==2.0.1
    # via coverage
tzdata==2024.1
    # via pandas
zipp==3.20.0
    # via importlib-resources

This may be related to https://github.com/astral-sh/uv/issues/6269.

charliermarsh commented 3 weeks ago

Ok, I've confirmed this is fixed by https://github.com/astral-sh/uv/pull/6268 -- sorry about that!

charliermarsh commented 3 weeks ago

\cc @BurntSushi