-
Notifications
You must be signed in to change notification settings - Fork 637
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
uv pip install fails with comparator on wildcard version specifier #1477
Comments
Thanks! That's actually not a "valid" specifier, but we have some fixups in the code for packages that use invalid specifiers. Will make sure this is covered. |
This fixes a bug where `uv pip install` failed to install `polars`: ``` $ uv pip install polars==0.14.0 error: Failed to download: polars==0.14.0 Caused by: Couldn't parse metadata of polars-0.14.0-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl from https://files.pythonhosted.org/packages/5c/c6/749022b096895790c971338de93e610210331ea6cb7c1c2cc32b7f433c4f/polars-0.14.0-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl Caused by: Operator >= cannot be used with a wildcard version specifier pyarrow>=4.0.*; extra == 'pyarrow' ^^^^^^^ ``` Since `pyarrow>=4.0.*; extra == 'pyarrow'` is invalid *and* it comes from the metadata of a dependency (that isn't under the control of the end user), we actually attempt to "fix" it. Namely, wildcard dependency specifications are only allowed with `==` and `!=`, as per the [Version Specifiers spec]. (They aren't explicitly forbidden in these cases, but instead only have specified behavior for the `==` and `!=` operators.) This is all fine, but it turns out that when we fix the `>=4.0.*` component, we also strip the quotes around `pyarrow`. (Because some dependency specifications include stray quotes.) We fix this by making our quote stripping a bit more selective. (We require that it appear adjacent to a digit or a `*`.) Note that #1477 also reports this error: ``` $ uv pip install 'requests>=2.30.*' error: Failed to parse `requests>=2.30.*` Caused by: Operator >= cannot be used with a wildcard version specifier requests>=2.30.* ``` However, we specifically keep that error message since it's something under the end user's control. And similarly for a dependency specification in a `requirements.txt` file. Fixes #1477 [Version Specifiers spec]: https://packaging.python.org/en/latest/specifications/version-specifiers/
This fixes a bug where `uv pip install` failed to install `polars`: ``` $ uv pip install polars==0.14.0 error: Failed to download: polars==0.14.0 Caused by: Couldn't parse metadata of polars-0.14.0-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl from https://files.pythonhosted.org/packages/5c/c6/749022b096895790c971338de93e610210331ea6cb7c1c2cc32b7f433c4f/polars-0.14.0-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl Caused by: Operator >= cannot be used with a wildcard version specifier pyarrow>=4.0.*; extra == 'pyarrow' ^^^^^^^ ``` Since `pyarrow>=4.0.*; extra == 'pyarrow'` is invalid *and* it comes from the metadata of a dependency (that isn't under the control of the end user), we actually attempt to "fix" it. Namely, wildcard dependency specifications are only allowed with `==` and `!=`, as per the [Version Specifiers spec]. (They aren't explicitly forbidden in these cases, but instead only have specified behavior for the `==` and `!=` operators.) This is all fine, but it turns out that when we fix the `>=4.0.*` component, we also strip the quotes around `pyarrow`. (Because some dependency specifications include stray quotes.) We fix this by making our quote stripping a bit more selective. (We require that it appear adjacent to a digit or a `*`.) Note that #1477 also reports this error: ``` $ uv pip install 'requests>=2.30.*' error: Failed to parse `requests>=2.30.*` Caused by: Operator >= cannot be used with a wildcard version specifier requests>=2.30.* ``` However, we specifically keep that error message since it's something under the end user's control. And similarly for a dependency specification in a `requirements.txt` file. Fixes #1477 [Version Specifiers spec]: https://packaging.python.org/en/latest/specifications/version-specifiers/
This fixes a bug where `uv pip install` failed to install `polars`: ``` $ uv pip install polars==0.14.0 error: Failed to download: polars==0.14.0 Caused by: Couldn't parse metadata of polars-0.14.0-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl from https://files.pythonhosted.org/packages/5c/c6/749022b096895790c971338de93e610210331ea6cb7c1c2cc32b7f433c4f/polars-0.14.0-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl Caused by: Operator >= cannot be used with a wildcard version specifier pyarrow>=4.0.*; extra == 'pyarrow' ^^^^^^^ ``` Since `pyarrow>=4.0.*; extra == 'pyarrow'` is invalid *and* it comes from the metadata of a dependency (that isn't under the control of the end user), we actually attempt to "fix" it. Namely, wildcard dependency specifications are only allowed with `==` and `!=`, as per the [Version Specifiers spec]. (They aren't explicitly forbidden in these cases, but instead only have specified behavior for the `==` and `!=` operators.) This is all fine, but it turns out that when we fix the `>=4.0.*` component, we also strip the quotes around `pyarrow`. (Because some dependency specifications include stray quotes.) We fix this by making our quote stripping a bit more selective. (We require that it appear adjacent to a digit or a `*`.) Note that #1477 also reports this error: ``` $ uv pip install 'requests>=2.30.*' error: Failed to parse `requests>=2.30.*` Caused by: Operator >= cannot be used with a wildcard version specifier requests>=2.30.* ``` However, we specifically keep that error message since it's something under the end user's control. And similarly for a dependency specification in a `requirements.txt` file. Fixes #1477 [Version Specifiers spec]: https://packaging.python.org/en/latest/specifications/version-specifiers/
still running into this problem
|
Can you open a new issue please? |
Minimal example:
requirements.txt with content:
or
pip install -r requirements.txt
will succeed, butuv pip install -r requirements.txt
will fail.For an example in the wild (how I encountered this issue):
pip install polars==0.14.0
succeeds, butuv pip install polars==0.14.0
fails withThe text was updated successfully, but these errors were encountered: