pypa / pip

The Python package installer
https://pip.pypa.io/
MIT License
9.53k stars 3.03k forks source link

pip does not apply packages' constraints to same package with extras #11924

Closed sanderr closed 1 year ago

sanderr commented 1 year ago

Description

When a requirements list contains both mypackage<some_constraint> and my_package[my_extra], the two seem to be treated separately, without applying the constraint to my_package[my_extra]. In the end, pip does manage to find a correct set of packages but this may involve unnecessary backtracking that (I think) could be easily avoided.

Consider the package inmanta-core. It has an extra named pytest-inmanta-extensions, which is strongly tied to it by version. It constraints the pytest-inmanta-extensions package to be the same version as inmanta-core itself (see here).

I tried the following: pip download "inmanta-core==6.0.0" "inmanta-core[pytest-inmanta-extensions]", expecting it to trivially find the appropriate versions. Alas, it seems to pick the trivial candidate for inmanta-core, but then pick a different (incorrect) candidate for inmanta-core[pytest-inmanta-extesions]. This later results in backtracking on the latter until it stumbles on the correct version. In this case it has to backtrack over some ten versions, trying it with dev versions (e.g. with --pre and our internal index) is way worse.

Since the package with and without extra have the same base, I would think constraints can be shared safely.

I think the cause may be related to https://github.com/pypa/pip/issues/11913#issuecomment-1491341333, but I haven't dug deep enough in the pip internals to know for sure.

Expected behavior

See description

pip version

23.0.1 and main (81f6a9f)

Python version

3.9.15

OS

Linux

How to Reproduce

pip download "inmanta-core==6.0.0" "inmanta-core[pytest-inmanta-extensions]"

Output

Collecting inmanta-core==6.0.0
  File was already downloaded /home/sander/.virtualenvs/tmp-6fecb770122ef28/inmanta-core-6.0.0.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting inmanta-core[pytest-inmanta-extensions]
  Using cached inmanta_core-8.2.0-py3-none-any.whl (619 kB)
...
<unrelated output>
...
Collecting inmanta-core[pytest-inmanta-extensions]
  Using cached inmanta_core-8.1.0-py3-none-any.whl (619 kB)
  Using cached inmanta_core-8.0.0-py3-none-any.whl (591 kB)
  Using cached inmanta_core-7.1.0-py3-none-any.whl (592 kB)
  Using cached inmanta_core-7.0.0-py3-none-any.whl (571 kB)
  Using cached inmanta_core-6.4.1-py3-none-any.whl (594 kB)
  Using cached inmanta_core-6.4.0-py3-none-any.whl (593 kB)
  Using cached inmanta_core-6.3.0-py3-none-any.whl (592 kB)
  Using cached inmanta_core-6.2.0-py3-none-any.whl (571 kB)
  Using cached inmanta_core-6.1.0-py3-none-any.whl (543 kB)
  Using cached inmanta_core-6.0.2-py3-none-any.whl (515 kB)
  Using cached inmanta_core-6.0.1-py3-none-any.whl (515 kB)
Collecting pytest-inmanta-extensions~=6.0.0.0.dev
  File was already downloaded /home/sander/.virtualenvs/tmp-6fecb770122ef28/pytest-inmanta-extensions-6.0.0.tar.gz
  Preparing metadata (setup.py) ... done

Code of Conduct

pfmoore commented 1 year ago

This is essentially by design, based on the comment you linked. I don't believe it will ever result in an incorrect resolution, although I guess that as you say it may cause some unnecessary backtracking. I think this is a fairly rare case, though - the situation you describe where the versions of the extra dependencies and the main package are tightly coupled seems unusual.

I don't think this is a bug, as it doesn't cause incorrect behaviour.

Having said that, if someone were to produce a PR to improve this, it would definitely be considered. But be aware, extras are extremely tricky to handle correctly, so this will not be simple to address.

sanderr commented 1 year ago

the situation you describe where the versions of the extra dependencies and the main package are tightly coupled seems unusual.

I have to agree with that, I think this is a rare case. I do think similar issues can occur in more common scenarios but I expect the backtracking to be more contained there.

I assumed this to be an easy thing to address, I guess I was wrong about that. After reading the comment once more I think I understand why. I'll try to have a look at the current implementation and see if I can come up with something that doesn't break compatibility.

notatallshaw commented 1 year ago

Am I correct in thinking that "inmanta-core==6.0.0" "inmanta-core[pytest-inmanta-extensions]" is functionally equivalent to "inmanta-core[pytest-inmanta-extensions]==6.0.0”.

Pip (or your own requirements build process) could have a step that "simplifies" user requirements before resolution even starts. This however would not improve things when such requirements are part of transitive dependencies, at that point applying such simplifications on requirements probably would be quite tricky.

sanderr commented 1 year ago

I was considering the same and I think it could already be an improvement if a more generic solution can not be found. But the use case that led me to create this ticket is as you describe (the constraint on the package without extra is a transitive dependency), so indeed it is not feasible there.

sanderr commented 1 year ago

I just realized this isn't actually affected by the unconventional coupling between the two packages I mentioned in the initial report. It occurs for any package with an extra if you want to install an older version:

in(tmp-37e9a3aa0746e4e) sander@bedevere:~/.virtualenvs/tmp-37e9a3aa0746e4e$ pip download resolvelib==0.3.0 resolvelib[examples]
Collecting resolvelib==0.3.0
  Downloading resolvelib-0.3.0-py2.py3-none-any.whl (10 kB)
Collecting resolvelib[examples]
  Downloading resolvelib-1.0.1-py2.py3-none-any.whl (17 kB)
  Downloading resolvelib-1.0.0-py2.py3-none-any.whl (17 kB)
  Downloading resolvelib-0.9.0-py2.py3-none-any.whl (16 kB)
  Downloading resolvelib-0.8.1-py2.py3-none-any.whl (16 kB)
  Downloading resolvelib-0.8.0-py2.py3-none-any.whl (15 kB)
  Using cached resolvelib-0.7.1-py2.py3-none-any.whl (15 kB)
  Downloading resolvelib-0.7.0-py2.py3-none-any.whl (15 kB)
  Using cached resolvelib-0.6.0-py2.py3-none-any.whl (15 kB)
  Downloading resolvelib-0.5.4-py2.py3-none-any.whl (12 kB)
  Downloading resolvelib-0.5.3-py2.py3-none-any.whl (12 kB)
  Downloading resolvelib-0.5.2-py2.py3-none-any.whl (12 kB)
  Downloading resolvelib-0.5.1-py2.py3-none-any.whl (11 kB)
  Downloading resolvelib-0.4.0-py2.py3-none-any.whl (11 kB)
Collecting requests
  Using cached requests-2.28.2-py3-none-any.whl (62 kB)
Collecting html5lib
  Using cached html5lib-1.1-py2.py3-none-any.whl (112 kB)
Collecting packaging
  Using cached packaging-23.0-py3-none-any.whl (42 kB)
Collecting six>=1.9
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting webencodings
  Using cached webencodings-0.5.1-py2.py3-none-any.whl (11 kB)
Collecting urllib3<1.27,>=1.21.1
  Using cached urllib3-1.26.15-py2.py3-none-any.whl (140 kB)
Collecting idna<4,>=2.5
  Using cached idna-3.4-py3-none-any.whl (61 kB)
Collecting charset-normalizer<4,>=2
  Using cached charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (199 kB)
Collecting certifi>=2017.4.17
  Using cached certifi-2022.12.7-py3-none-any.whl (155 kB)
Saved ./resolvelib-0.3.0-py2.py3-none-any.whl
Saved ./html5lib-1.1-py2.py3-none-any.whl
Saved ./packaging-23.0-py3-none-any.whl
Saved ./requests-2.28.2-py3-none-any.whl
Saved ./certifi-2022.12.7-py3-none-any.whl
Saved ./charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Saved ./idna-3.4-py3-none-any.whl
Saved ./six-1.16.0-py2.py3-none-any.whl
Saved ./urllib3-1.26.15-py2.py3-none-any.whl
Saved ./webencodings-0.5.1-py2.py3-none-any.whl
Successfully downloaded resolvelib html5lib packaging requests certifi charset-normalizer idna six urllib3 webencodings

This is of course a ridiculous example (it's just the first simple package I could think of that I know has extras) but I think it shows this is a more generic issue than discussed up till here. Any package with an extra that needs to maintain some sort of LTS on its older versions is susceptible to this.

Of course, this doesn't change the fact that the end result is still correct (unless a dev version is requested on one of the requirements, pip doesn't offer dev candidates for the other in that case) and that it would be difficult to handle correctly.

nijel commented 1 year ago

This can lead to huge backtracking without providing a clear error where the problem is. I was just hit by this in https://github.com/WeblateOrg/docker/pull/1788 (log at https://github.com/WeblateOrg/docker/actions/runs/4666399591/jobs/8260949502?pr=1788 or in details below).

The problem in this case is that backtracking went into many packages and ended up saying the issue is in celery constraints, while it is actually in Django ones (which the pull request is trying to upgrade).

Reproducer: pip install 'Django==4.2' 'Weblate==4.16.4' 'celery==5.2.7'

Fails after a lot of backtracking with:

ERROR: Cannot install celery==5.2.7, celery[redis]==5.2.3, celery[redis]==5.2.4 and celery[redis]==5.2.6 because these package versions have conflicting dependencies.

The conflict is caused by:
    The user requested celery==5.2.7
    celery[redis] 5.2.6 depends on celery 5.2.6 (from https://files.pythonhosted.org/packages/a0/ed/8a2e381aa9fa6fa5ac6891b0b472e927892f57a39842eff18cc917ceba57/celery-5.2.6-py3-none-any.whl (from https://pypi.org/simple/celery/) (requires-python:>=3.7,))
    The user requested celery==5.2.7
    celery[redis] 5.2.4 depends on celery 5.2.4 (from https://files.pythonhosted.org/packages/9d/a2/77d4bf33786dba473218067527ec40002cdaeed3599e5377e0f32143bba2/celery-5.2.4-py3-none-any.whl (from https://pypi.org/simple/celery/) (requires-python:>=3.7,))
    The user requested celery==5.2.7
    celery[redis] 5.2.3 depends on celery 5.2.3 (from https://files.pythonhosted.org/packages/1e/c2/52a01d3f53ddf57c80b011714dd63295c69426121d35d0ff41976b83506c/celery-5.2.3-py3-none-any.whl (from https://pypi.org/simple/celery/) (requires-python:>=3.7,))

While I'd actually expect something like this:

ERROR: Cannot install Django[argon2]<4.2 and >=3.2 and Django==4.2 because these package versions have conflicting dependencies.

The conflict is caused by:
    Weblate 4.16.4 depends on Django[argon2]<4.2 and >=3.2
    The user requested Django==4.2
``` + pip install --no-cache-dir -r /usr/src/weblate/requirements.txt 'Weblate[all,MySQL,zxcvbn]==4.16.4' Collecting https://github.com/nijel/supervisor-stdout/archive/c909c1a1ddabaf679dc2eaecb3b8f5ad6bef467a.zip (from -r /usr/src/weblate/requirements.txt (line 27)) Downloading https://github.com/nijel/supervisor-stdout/archive/c909c1a1ddabaf679dc2eaecb3b8f5ad6bef467a.zip - 2.6 kB ? 0:00:00 Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting Weblate[MySQL,all,zxcvbn]==4.16.4 Downloading Weblate-4.16.4-py3-none-any.whl (28.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 28.6/28.6 MB 199.4 MB/s eta 0:00:00 Collecting aeidon==1.12 Downloading aeidon-1.12-py3-none-any.whl (148 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 148.7/148.7 kB 253.1 MB/s eta 0:00:00 Collecting argon2-cffi==21.3.0 Downloading argon2_cffi-21.3.0-py3-none-any.whl (14 kB) Collecting borgbackup==1.2.4 Downloading borgbackup-1.2.4.tar.gz (4.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.1/4.1 MB 227.8 MB/s eta 0:00:00 Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Installing backend dependencies: started Installing backend dependencies: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting celery==5.2.7 Downloading celery-5.2.7-py3-none-any.whl (405 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 405.6/405.6 kB 247.9 MB/s eta 0:00:00 Requirement already satisfied: cffi==1.15.1 in /usr/local/lib/python3.11/site-packages (from -r /usr/src/weblate/requirements.txt (line 6)) (1.15.1) Collecting cryptography==40.0.1 Downloading cryptography-40.0.1-cp36-abi3-manylinux_2_28_x86_64.whl (3.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.7/3.7 MB 248.3 MB/s eta 0:00:00 Collecting Django==4.2 Downloading Django-4.2-py3-none-any.whl (8.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.0/8.0 MB 242.4 MB/s eta 0:00:00 Collecting django-appconf==1.0.5 Downloading django_appconf-1.0.5-py3-none-any.whl (6.4 kB) Collecting django-auth-ldap==4.1.0 Downloading django_auth_ldap-4.1.0-py3-none-any.whl (20 kB) Collecting django-cors-headers==3.14.0 Downloading django_cors_headers-3.14.0-py3-none-any.whl (13 kB) Collecting django-crispy-forms==2.0 Downloading django_crispy_forms-2.0-py3-none-any.whl (31 kB) Collecting django-redis==5.2.0 Downloading django_redis-5.2.0-py3-none-any.whl (30 kB) Collecting django_compressor==4.3.1 Downloading django_compressor-4.3.1-py2.py3-none-any.whl (148 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 149.0/149.0 kB 229.4 MB/s eta 0:00:00 Collecting djangorestframework==3.14.0 Downloading djangorestframework-3.14.0-py3-none-any.whl (1.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 271.1 MB/s eta 0:00:00 Collecting gevent==22.10.2 Downloading gevent-22.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.8 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.8/6.8 MB 247.4 MB/s eta 0:00:00 Collecting git-review==2.3.1 Downloading git_review-2.3.1-py3-none-any.whl (49 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 49.4/49.4 kB 131.6 MB/s eta 0:00:00 Collecting gunicorn==20.1.0 Downloading gunicorn-20.1.0-py3-none-any.whl (79 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 79.5/79.5 kB 144.8 MB/s eta 0:00:00 Collecting hiredis==2.2.2 Downloading hiredis-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (166 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 166.0/166.0 kB 162.2 MB/s eta 0:00:00 Collecting httpretty==1.1.4 Downloading httpretty-1.1.4.tar.gz (442 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 442.4/442.4 kB 229.4 MB/s eta 0:00:00 Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting iniparse==0.5 Downloading iniparse-0.5-py3-none-any.whl (24 kB) Requirement already satisfied: lxml==4.9.2 in /usr/local/lib/python3.11/site-packages (from -r /usr/src/weblate/requirements.txt (line 29)) (4.9.2) Collecting mercurial==6.4 Downloading mercurial-6.4.tar.gz (8.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.2/8.2 MB 236.2 MB/s eta 0:00:00 Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting nh3==0.2.9 Downloading nh3-0.2.9-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 229.6 MB/s eta 0:00:00 Collecting openpyxl==3.1.2 Downloading openpyxl-3.1.2-py2.py3-none-any.whl (249 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 250.0/250.0 kB 271.9 MB/s eta 0:00:00 Collecting phply==1.2.6 Downloading phply-1.2.6-py2.py3-none-any.whl (74 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 74.6/74.6 kB 182.2 MB/s eta 0:00:00 Requirement already satisfied: pip==23.0.1 in /usr/local/lib/python3.11/site-packages (from -r /usr/src/weblate/requirements.txt (line 34)) (23.0.1) Collecting psycopg2==2.9.6 Downloading psycopg2-2.9.6.tar.gz (383 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 384.0/384.0 kB 216.2 MB/s eta 0:00:00 Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting Pygments==2.15.0 Downloading Pygments-2.15.0-py3-none-any.whl (1.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 256.8 MB/s eta 0:00:00 Collecting python-akismet==0.4.3 Downloading python_akismet-0.4.3-py2.py3-none-any.whl (7.1 kB) Collecting python-dateutil==2.8.2 Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 247.7/247.7 kB 227.7 MB/s eta 0:00:00 Collecting python3-saml==1.15.0 Downloading python3_saml-1.15.0-py3-none-any.whl (76 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 76.0/76.0 kB 222.8 MB/s eta 0:00:00 Collecting pyuca==1.2 Downloading pyuca-1.2-py2.py3-none-any.whl (1.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 215.6 MB/s eta 0:00:00 Collecting rapidfuzz==2.15.1 Downloading rapidfuzz-2.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/3.0 MB 225.5 MB/s eta 0:00:00 Collecting raven Downloading raven-6.10.0-py2.py3-none-any.whl (284 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 284.3/284.3 kB 274.4 MB/s eta 0:00:00 Collecting redis==4.5.4 Downloading redis-4.5.4-py3-none-any.whl (238 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 238.9/238.9 kB 268.2 MB/s eta 0:00:00 Collecting responses Downloading responses-0.23.1-py3-none-any.whl (52 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.1/52.1 kB 135.1 MB/s eta 0:00:00 Collecting rollbar Downloading rollbar-0.16.3-py3-none-any.whl (98 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.1/98.1 kB 245.5 MB/s eta 0:00:00 Collecting ruamel.yaml==0.17.21 Downloading ruamel.yaml-0.17.21-py3-none-any.whl (109 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 109.5/109.5 kB 247.6 MB/s eta 0:00:00 Collecting selenium Downloading selenium-4.8.3-py3-none-any.whl (6.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.5/6.5 MB 239.2 MB/s eta 0:00:00 Requirement already satisfied: setuptools==67.6.1 in /usr/local/lib/python3.11/site-packages (from -r /usr/src/weblate/requirements.txt (line 48)) (67.6.1) Collecting siphashc==2.1 Downloading siphashc-2.1.tar.gz (6.6 kB) Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting social-auth-app-django==5.2.0 Downloading social_auth_app_django-5.2.0-py3-none-any.whl (24 kB) Collecting social-auth-core==4.4.1 Downloading social_auth_core-4.4.1-py3-none-any.whl (347 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 347.0/347.0 kB 217.1 MB/s eta 0:00:00 Collecting supervisor==4.2.5 Downloading supervisor-4.2.5-py2.py3-none-any.whl (319 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 319.6/319.6 kB 290.0 MB/s eta 0:00:00 Collecting tesserocr==2.6.0 Downloading tesserocr-2.6.0.tar.gz (58 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.6/58.6 kB 229.8 MB/s eta 0:00:00 Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting translate-toolkit==3.8.6 Downloading translate_toolkit-3.8.6-py3-none-any.whl (1.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 232.1 MB/s eta 0:00:00 Collecting translation-finder==2.15 Downloading translation_finder-2.15-py3-none-any.whl (80 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 80.1/80.1 kB 146.2 MB/s eta 0:00:00 Collecting weblate-fedora-messaging==0.5 Downloading weblate_fedora_messaging-0.5-py3-none-any.whl (21 kB) Collecting weblate-language-data==2023.3 Downloading weblate_language_data-2023.3-py3-none-any.whl (2.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3/2.3 MB 26.2 MB/s eta 0:00:00 Requirement already satisfied: wheel==0.40.0 in /usr/local/lib/python3.11/site-packages (from -r /usr/src/weblate/requirements.txt (line 58)) (0.40.0) Collecting wllegal==2023.1 Downloading wllegal-2023.1-py3-none-any.whl (1.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 232.0 MB/s eta 0:00:00 Collecting zeep==4.2.1 Downloading zeep-4.2.1-py3-none-any.whl (101 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 101.2/101.2 kB 222.7 MB/s eta 0:00:00 Collecting charset-normalizer<4.0,>=2.0.12 Downloading charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (197 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 197.3/197.3 kB 250.2 MB/s eta 0:00:00 Collecting crispy-bootstrap3==2022.1 Downloading crispy_bootstrap3-2022.1-py3-none-any.whl (21 kB) Collecting cssselect<1.3,>=1.2 Downloading cssselect-1.2.0-py2.py3-none-any.whl (18 kB) Collecting Cython<0.30,>=0.29.14 Downloading Cython-0.29.34-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (1.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.9/1.9 MB 227.4 MB/s eta 0:00:00 Collecting diff-match-patch==20200713 Downloading diff_match_patch-20200713-py3-none-any.whl (61 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.6/61.6 kB 120.6 MB/s eta 0:00:00 Collecting django-celery-beat<2.6,>=2.4.0 Downloading django_celery_beat-2.5.0-py3-none-any.whl (97 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 97.2/97.2 kB 253.6 MB/s eta 0:00:00 Collecting django-filter<23.0,>=2.4.0 Downloading django_filter-22.1-py3-none-any.whl (80 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 80.9/80.9 kB 244.7 MB/s eta 0:00:00 Collecting Django[argon2]<4.2,>=3.2 Downloading Django-4.1.8-py3-none-any.whl (8.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1/8.1 MB 267.7 MB/s eta 0:00:00 Collecting filelock<3.11,>=3.7 Downloading filelock-3.10.7-py3-none-any.whl (10 kB) Collecting GitPython<3.2,>=2.1.15 Downloading GitPython-3.1.31-py3-none-any.whl (184 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 184.3/184.3 kB 273.4 MB/s eta 0:00:00 Collecting html2text<2020.1.17,>=2019.8.11 Downloading html2text-2020.1.16-py3-none-any.whl (32 kB) Collecting jsonschema<5,>=4.5 Downloading jsonschema-4.17.3-py3-none-any.whl (90 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.4/90.4 kB 241.1 MB/s eta 0:00:00 Collecting misaka<2.2,>=2.1.0 Downloading misaka-2.1.1.tar.gz (125 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 125.2/125.2 kB 261.8 MB/s eta 0:00:00 Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting packaging<23.1,>=22 Downloading packaging-23.0-py3-none-any.whl (42 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 42.7/42.7 kB 200.5 MB/s eta 0:00:00 Collecting Pillow<10.0,>=9.0.0 Downloading Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl (3.4 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4/3.4 MB 241.8 MB/s eta 0:00:00 Collecting pyahocorasick<2.1,>=1.4 Downloading pyahocorasick-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (118 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 118.4/118.4 kB 176.9 MB/s eta 0:00:00 Collecting pycairo>=1.15.3 Downloading pycairo-1.23.0.tar.gz (344 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 344.6/344.6 kB 284.3 MB/s eta 0:00:00 Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Installing backend dependencies: started Installing backend dependencies: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting pygobject>=3.34.0 Downloading PyGObject-3.44.1.tar.gz (720 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 720.5/720.5 kB 286.1 MB/s eta 0:00:00 Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting pyicumessageformat<1.1,>=1.0.0 Downloading pyicumessageformat-1.0.0-py3-none-any.whl (8.9 kB) Collecting pyparsing<3.1,>=3.0.7 Downloading pyparsing-3.0.9-py3-none-any.whl (98 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.3/98.3 kB 110.7 MB/s eta 0:00:00 Collecting python-redis-lock<4.1,>=4 Downloading python_redis_lock-4.0.0-py3-none-any.whl (12 kB) Collecting requests<2.29,>=2.26.0 Downloading requests-2.28.2-py3-none-any.whl (62 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.8/62.8 kB 149.7 MB/s eta 0:00:00 Collecting sentry-sdk<2,>=1.6 Downloading sentry_sdk-1.19.1-py2.py3-none-any.whl (199 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 199.2/199.2 kB 272.1 MB/s eta 0:00:00 Collecting user-agents<2.3,>=2.0 Downloading user_agents-2.2.0-py3-none-any.whl (9.6 kB) Collecting weblate-schemas==2023.2 Downloading weblate_schemas-2023.2-py3-none-any.whl (12 kB) Collecting mysqlclient>=2.0.1 Downloading mysqlclient-2.1.1.tar.gz (88 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 88.1/88.1 kB 193.0 MB/s eta 0:00:00 Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting boto3<1.27.0,>=1.19.0 Downloading boto3-1.26.110-py3-none-any.whl (135 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 135.6/135.6 kB 257.5 MB/s eta 0:00:00 Collecting fluent.syntax<0.19,>=0.18.1 Downloading fluent.syntax-0.18.1-py2.py3-none-any.whl (16 kB) Collecting google-cloud-translate<3.12.0,>=3.0.0 Downloading google_cloud_translate-3.11.1-py2.py3-none-any.whl (128 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 128.4/128.4 kB 256.1 MB/s eta 0:00:00 Collecting psycopg2-binary<2.10.0,>=2.8.0 Downloading psycopg2_binary-2.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/3.0 MB 230.3 MB/s eta 0:00:00 Collecting django-zxcvbn-*** Downloading django_zxcvbn_password-2.1.1-py2.py3-none-any.whl (409 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 409.4/409.4 kB 284.4 MB/s eta 0:00:00 Collecting chardet>=2.2.1 Downloading chardet-5.1.0-py3-none-any.whl (199 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 199.1/199.1 kB 271.4 MB/s eta 0:00:00 Collecting argon2-cffi-bindings Downloading argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (86 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 86.2/86.2 kB 136.1 MB/s eta 0:00:00 Collecting msgpack!=1.0.1,<=1.0.5,>=0.5.6 Downloading msgpack-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (325 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 325.1/325.1 kB 215.7 MB/s eta 0:00:00 Collecting pytz>=2021.3 Downloading pytz-2023.3-py2.py3-none-any.whl (502 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 502.3/502.3 kB 289.6 MB/s eta 0:00:00 Collecting billiard<4.0,>=3.6.4.0 Downloading billiard-3.6.4.0-py3-none-any.whl (89 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 89.5/89.5 kB 243.8 MB/s eta 0:00:00 Collecting kombu<6.0,>=5.2.3 Downloading kombu-5.2.4-py3-none-any.whl (189 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 189.2/189.2 kB 244.7 MB/s eta 0:00:00 Collecting vine<6.0,>=5.0.0 Downloading vine-5.0.0-py2.py3-none-any.whl (9.4 kB) Collecting click<9.0,>=8.0.3 Downloading click-8.1.3-py3-none-any.whl (96 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.6/96.6 kB 212.1 MB/s eta 0:00:00 Collecting click-didyoumean>=0.0.3 Downloading click_didyoumean-0.3.0-py3-none-any.whl (2.7 kB) Collecting click-repl>=0.2.0 Downloading click_repl-0.2.0-py3-none-any.whl (5.2 kB) Collecting click-plugins>=1.1.1 Downloading click_plugins-1.1.1-py2.py3-none-any.whl (7.5 kB) Requirement already satisfied: pycparser in /usr/local/lib/python3.11/site-packages (from cffi==1.15.1->-r /usr/src/weblate/requirements.txt (line 6)) (2.21) Collecting asgiref<4,>=3.6.0 Downloading asgiref-3.6.0-py3-none-any.whl (23 kB) Collecting sqlparse>=0.3.1 Downloading sqlparse-0.4.3-py3-none-any.whl (42 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 42.8/42.8 kB 197.8 MB/s eta 0:00:00 Collecting python-ldap>=3.1 Downloading python-ldap-3.4.3.tar.gz (377 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 377.4/377.4 kB 151.1 MB/s eta 0:00:00 Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting rcssmin==1.1.1 Downloading rcssmin-1.1.1-cp311-cp311-manylinux1_x86_64.whl (48 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 48.2/48.2 kB 210.5 MB/s eta 0:00:00 Collecting rjsmin==1.2.1 Downloading rjsmin-1.2.1-cp311-cp311-manylinux1_x86_64.whl (31 kB) Collecting zope.event Downloading zope.event-4.6-py2.py3-none-any.whl (6.8 kB) Collecting zope.interface Downloading zope.interface-6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (249 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 249.0/249.0 kB 272.9 MB/s eta 0:00:00 Collecting greenlet>=2.0.0 Downloading greenlet-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (618 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 618.8/618.8 kB 155.2 MB/s eta 0:00:00 Collecting six Downloading six-1.16.0-py2.py3-none-any.whl (11 kB) Collecting et-xmlfile Downloading et_xmlfile-1.1.0-py3-none-any.whl (4.7 kB) Collecting ply Downloading ply-3.11-py2.py3-none-any.whl (49 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 49.6/49.6 kB 213.7 MB/s eta 0:00:00 Collecting isodate>=0.6.1 Downloading isodate-0.6.1-py2.py3-none-any.whl (41 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.7/41.7 kB 188.6 MB/s eta 0:00:00 Collecting xmlsec>=1.3.9 Downloading xmlsec-1.3.13.tar.gz (64 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.6/64.6 kB 226.2 MB/s eta 0:00:00 Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting async-timeout>=4.0.2 Downloading async_timeout-4.0.2-py3-none-any.whl (5.8 kB) Collecting oauthlib>=1.0.3 Downloading oauthlib-3.2.2-py3-none-any.whl (151 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 151.7/151.7 kB 250.2 MB/s eta 0:00:00 Collecting requests-oauthlib>=0.6.1 Downloading requests_oauthlib-1.3.1-py2.py3-none-any.whl (23 kB) Collecting PyJWT>=2.0.0 Downloading PyJWT-2.6.0-py3-none-any.whl (20 kB) Collecting defusedxml>=0.5.0rc1 Downloading defusedxml-0.7.1-py2.py3-none-any.whl (25 kB) Collecting python3-openid>=3.0.10 Downloading python3_openid-3.2.0-py3-none-any.whl (133 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.7/133.7 kB 206.5 MB/s eta 0:00:00 Collecting fedora-messaging==3.2.0 Downloading fedora_messaging-3.2.0-py3-none-any.whl (108 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 108.1/108.1 kB 245.1 MB/s eta 0:00:00 Collecting attrs>=17.2.0 Downloading attrs-22.2.0-py3-none-any.whl (60 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 60.0/60.0 kB 219.4 MB/s eta 0:00:00 Collecting platformdirs>=1.4.0 Downloading platformdirs-3.2.0-py3-none-any.whl (14 kB) Collecting requests-toolbelt>=0.7.1 Downloading requests_toolbelt-0.10.1-py2.py3-none-any.whl (54 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 54.5/54.5 kB 216.9 MB/s eta 0:00:00 Collecting requests-file>=1.5.1 Downloading requests_file-1.5.1-py2.py3-none-any.whl (3.7 kB) Collecting zxcvbn Downloading zxcvbn-4.4.28.tar.gz (407 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 407.9/407.9 kB 243.8 MB/s eta 0:00:00 Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting blinker Downloading blinker-1.6.1-py3-none-any.whl (13 kB) Collecting crochet Downloading crochet-2.0.0-py3-none-any.whl (31 kB) Collecting Twisted Downloading Twisted-22.10.0-py3-none-any.whl (3.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 241.3 MB/s eta 0:00:00 Collecting PyOpenSSL Downloading pyOpenSSL-23.1.1-py3-none-any.whl (57 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.9/57.9 kB 222.2 MB/s eta 0:00:00 Collecting pika>=1.0.1 Downloading pika-1.3.1-py3-none-any.whl (155 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.3/155.3 kB 246.2 MB/s eta 0:00:00 Collecting service-identity Downloading service_identity-21.1.0-py2.py3-none-any.whl (12 kB) Collecting fqdn Downloading fqdn-1.5.1-py3-none-any.whl (9.1 kB) Collecting rfc3987 Downloading rfc3987-1.3.8-py2.py3-none-any.whl (13 kB) Collecting strict-rfc3339 Downloading strict-rfc3339-0.7.tar.gz (17 kB) Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting urllib3>=1.25.10 Downloading urllib3-1.26.15-py2.py3-none-any.whl (140 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 140.9/140.9 kB 269.7 MB/s eta 0:00:00 Collecting pyyaml Downloading PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (757 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 757.9/757.9 kB 252.2 MB/s eta 0:00:00 Collecting types-PyYAML Downloading types_PyYAML-6.0.12.9-py3-none-any.whl (14 kB) Collecting trio~=0.17 Downloading trio-0.22.0-py3-none-any.whl (384 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 384.9/384.9 kB 241.7 MB/s eta 0:00:00 Collecting trio-websocket~=0.9 Downloading trio_websocket-0.10.2-py3-none-any.whl (17 kB) Collecting certifi>=2021.10.8 Downloading certifi-2022.12.7-py3-none-any.whl (155 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.3/155.3 kB 182.1 MB/s eta 0:00:00 Collecting botocore<1.30.0,>=1.29.110 Downloading botocore-1.29.110-py3-none-any.whl (10.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.6/10.6 MB 256.8 MB/s eta 0:00:00 Collecting jmespath<2.0.0,>=0.7.1 Downloading jmespath-1.0.1-py3-none-any.whl (20 kB) Collecting s3transfer<0.7.0,>=0.6.0 Downloading s3transfer-0.6.0-py3-none-any.whl (79 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 79.6/79.6 kB 213.3 MB/s eta 0:00:00 Collecting prompt-toolkit Downloading prompt_toolkit-3.0.38-py3-none-any.whl (385 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 385.8/385.8 kB 288.8 MB/s eta 0:00:00 Collecting cron-descriptor>=1.2.32 Downloading cron_descriptor-1.2.35.tar.gz (29 kB) Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting django-timezone-field>=5.0 Downloading django_timezone_field-5.0-py3-none-any.whl (10 kB) Collecting python-crontab>=2.3.4 Downloading python_crontab-2.7.1-py3-none-any.whl (26 kB) Collecting tzdata Downloading tzdata-2023.3-py2.py3-none-any.whl (341 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 341.8/341.8 kB 173.9 MB/s eta 0:00:00 Collecting Django[argon2]<4.2,>=3.2 Downloading Django-4.1.7-py3-none-any.whl (8.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1/8.1 MB 262.4 MB/s eta 0:00:00 Downloading Django-4.1.6-py3-none-any.whl (8.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1/8.1 MB 225.9 MB/s eta 0:00:00 Downloading Django-4.1.5-py3-none-any.whl (8.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1/8.1 MB 260.4 MB/s eta 0:00:00 Downloading Django-4.1.4-py3-none-any.whl (8.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1/8.1 MB 198.8 MB/s eta 0:00:00 Downloading Django-4.1.3-py3-none-any.whl (8.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1/8.1 MB 265.2 MB/s eta 0:00:00 Downloading Django-4.1.2-py3-none-any.whl (8.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1/8.1 MB 267.7 MB/s eta 0:00:00 Downloading Django-4.1.1-py3-none-any.whl (8.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1/8.1 MB 260.0 MB/s eta 0:00:00 Downloading Django-4.1-py3-none-any.whl (8.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1/8.1 MB 243.3 MB/s eta 0:00:00 Downloading Django-4.0.10-py3-none-any.whl (8.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.0/8.0 MB 185.3 MB/s eta 0:00:00 Downloading Django-4.0.9-py3-none-any.whl (8.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.0/8.0 MB 44.4 MB/s eta 0:00:00 Downloading Django-4.0.8-py3-none-any.whl (8.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.0/8.0 MB 179.3 MB/s eta 0:00:00 Downloading Django-4.0.7-py3-none-any.whl (8.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.0/8.0 MB 273.9 MB/s eta 0:00:00 Downloading Django-4.0.6-py3-none-any.whl (8.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.0/8.0 MB 230.0 MB/s eta 0:00:00 Downloading Django-4.0.5-py3-none-any.whl (8.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.0/8.0 MB 246.4 MB/s eta 0:00:00 Downloading Django-4.0.4-py3-none-any.whl (8.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.0/8.0 MB 267.2 MB/s eta 0:00:00 Downloading Django-4.0.3-py3-none-any.whl (8.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.0/8.0 MB 207.5 MB/s eta 0:00:00 Downloading Django-4.0.2-py3-none-any.whl (8.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.0/8.0 MB 236.4 MB/s eta 0:00:00 Downloading Django-4.0.1-py3-none-any.whl (8.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.0/8.0 MB 213.3 MB/s eta 0:00:00 Downloading Django-4.0-py3-none-any.whl (8.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.0/8.0 MB 238.0 MB/s eta 0:00:00 Downloading Django-3.2.18-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 242.6 MB/s eta 0:00:00 Downloading Django-3.2.17-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 223.4 MB/s eta 0:00:00 Downloading Django-3.2.16-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 237.3 MB/s eta 0:00:00 Downloading Django-3.2.15-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 214.8 MB/s eta 0:00:00 Downloading Django-3.2.14-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 246.6 MB/s eta 0:00:00 Downloading Django-3.2.13-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 246.5 MB/s eta 0:00:00 Downloading Django-3.2.12-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 240.6 MB/s eta 0:00:00 Downloading Django-3.2.11-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 225.6 MB/s eta 0:00:00 Downloading Django-3.2.10-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 224.3 MB/s eta 0:00:00 Downloading Django-3.2.9-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 248.6 MB/s eta 0:00:00 Downloading Django-3.2.8-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 243.6 MB/s eta 0:00:00 Downloading Django-3.2.7-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 252.5 MB/s eta 0:00:00 Downloading Django-3.2.6-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 230.5 MB/s eta 0:00:00 Downloading Django-3.2.5-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 250.6 MB/s eta 0:00:00 Downloading Django-3.2.4-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 231.0 MB/s eta 0:00:00 Downloading Django-3.2.3-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 256.3 MB/s eta 0:00:00 Downloading Django-3.2.2-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 136.4 MB/s eta 0:00:00 Downloading Django-3.2.1-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 213.8 MB/s eta 0:00:00 Downloading Django-3.2-py3-none-any.whl (7.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 229.8 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of django-filter to determine which version is compatible with other requirements. This could take a while. Collecting django-filter<23.0,>=2.4.0 Downloading django_filter-21.1-py3-none-any.whl (81 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.4/81.4 kB 208.3 MB/s eta 0:00:00 Downloading django_filter-2.4.0-py3-none-any.whl (73 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.2/73.2 kB 171.2 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of django-celery-beat to determine which version is compatible with other requirements. This could take a while. Collecting django-celery-beat<2.6,>=2.4.0 Downloading django_celery_beat-2.4.0-py3-none-any.whl (94 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 94.3/94.3 kB 221.0 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of defusedxml to determine which version is compatible with other requirements. This could take a while. Collecting defusedxml>=0.5.0rc1 Downloading defusedxml-0.7.0-py2.py3-none-any.whl (25 kB) Downloading defusedxml-0.7.0rc2-py2.py3-none-any.whl (25 kB) INFO: pip is looking at multiple versions of django-filter to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of cython to determine which version is compatible with other requirements. This could take a while. Collecting Cython<0.30,>=0.29.14 Downloading Cython-0.29.33-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (1.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.9/1.9 MB 256.4 MB/s eta 0:00:00 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. Downloading Cython-0.29.32-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (1.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.9/1.9 MB 271.6 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of cssselect to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of click-repl to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of click-plugins to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of click-didyoumean to determine which version is compatible with other requirements. This could take a while. Collecting click-didyoumean>=0.0.3 Downloading click_didyoumean-0.2.0-py3-none-any.whl (2.7 kB) Downloading click_didyoumean-0.1.0-py3-none-any.whl (2.6 kB) INFO: pip is looking at multiple versions of click to determine which version is compatible with other requirements. This could take a while. Collecting click<9.0,>=8.0.3 Downloading click-8.1.2-py3-none-any.whl (96 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.6/96.6 kB 246.4 MB/s eta 0:00:00 Downloading click-8.1.1-py3-none-any.whl (96 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.6/96.6 kB 227.3 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of charset-normalizer to determine which version is compatible with other requirements. This could take a while. Collecting charset-normalizer<4.0,>=2.0.12 Downloading charset_normalizer-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (196 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 196.8/196.8 kB 251.0 MB/s eta 0:00:00 Downloading charset_normalizer-3.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (196 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 196.7/196.7 kB 92.5 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of chardet to determine which version is compatible with other requirements. This could take a while. Collecting chardet>=2.2.1 Downloading chardet-5.0.0-py3-none-any.whl (193 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 193.6/193.6 kB 271.2 MB/s eta 0:00:00 Downloading chardet-4.0.0-py2.py3-none-any.whl (178 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 178.7/178.7 kB 270.3 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of certifi to determine which version is compatible with other requirements. This could take a while. Collecting certifi>=2021.10.8 Downloading certifi-2022.9.24-py3-none-any.whl (161 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 161.1/161.1 kB 271.0 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of defusedxml to determine which version is compatible with other requirements. This could take a while. Downloading certifi-2022.9.14-py3-none-any.whl (162 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 162.5/162.5 kB 244.0 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of django-celery-beat to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of celery[redis] to determine which version is compatible with other requirements. This could take a while. Collecting celery[redis]<5.3,>=5.2.3 Downloading celery-5.2.6-py3-none-any.whl (405 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 405.6/405.6 kB 282.6 MB/s eta 0:00:00 Downloading celery-5.2.4-py3-none-any.whl (405 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 405.6/405.6 kB 252.8 MB/s eta 0:00:00 Downloading celery-5.2.3-py3-none-any.whl (405 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 405.6/405.6 kB 269.0 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of boto3 to determine which version is compatible with other requirements. This could take a while. Collecting boto3<1.27.0,>=1.19.0 Downloading boto3-1.26.109-py3-none-any.whl (135 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 135.6/135.6 kB 253.0 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of cython to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of cssselect to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of click-repl to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of click-plugins to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of click-didyoumean to determine which version is compatible with other requirements. This could take a while. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: pip is looking at multiple versions of click to determine which version is compatible with other requirements. This could take a while. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: pip is looking at multiple versions of charset-normalizer to determine which version is compatible with other requirements. This could take a while. Downloading boto3-1.26.108-py3-none-any.whl (135 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 135.6/135.6 kB 260.1 MB/s eta 0:00:00 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. Downloading boto3-1.26.107-py3-none-any.whl (135 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 135.6/135.6 kB 260.8 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of billiard to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of attrs to determine which version is compatible with other requirements. This could take a while. Collecting attrs>=17.2.0 Downloading attrs-22.1.0-py2.py3-none-any.whl (58 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.8/58.8 kB 203.3 MB/s eta 0:00:00 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: pip is looking at multiple versions of chardet to determine which version is compatible with other requirements. This could take a while. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: pip is looking at multiple versions of certifi to determine which version is compatible with other requirements. This could take a while. Downloading attrs-21.4.0-py2.py3-none-any.whl (60 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 60.6/60.6 kB 217.5 MB/s eta 0:00:00 Downloading attrs-21.3.0-py2.py3-none-any.whl (61 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.9/61.9 kB 175.5 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of boto3 to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of async-timeout to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of asgiref to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of selenium to determine which version is compatible with other requirements. This could take a while. Collecting selenium Downloading selenium-4.8.2-py3-none-any.whl (6.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.9/6.9 MB 222.4 MB/s eta 0:00:00 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. Downloading selenium-4.8.1-py3-none-any.whl (6.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.9/6.9 MB 212.0 MB/s eta 0:00:00 Downloading selenium-4.8.0-py3-none-any.whl (6.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3/6.3 MB 246.5 MB/s eta 0:00:00 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: pip is looking at multiple versions of billiard to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of attrs to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of rollbar to determine which version is compatible with other requirements. This could take a while. Collecting rollbar Downloading rollbar-0.16.2.tar.gz (71 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 71.4/71.4 kB 227.5 MB/s eta 0:00:00 Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Downloading rollbar-0.16.1.tar.gz (70 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 70.9/70.9 kB 196.0 MB/s eta 0:00:00 Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Downloading rollbar-0.15.2.tar.gz (49 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 49.4/49.4 kB 192.7 MB/s eta 0:00:00 Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: pip is looking at multiple versions of async-timeout to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of asgiref to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of selenium to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of responses to determine which version is compatible with other requirements. This could take a while. Collecting responses Downloading responses-0.23.0-py3-none-any.whl (52 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.1/52.1 kB 129.2 MB/s eta 0:00:00 Downloading responses-0.22.0-py3-none-any.whl (51 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 51.1/51.1 kB 204.7 MB/s eta 0:00:00 Collecting toml Downloading toml-0.10.2-py2.py3-none-any.whl (16 kB) Collecting types-toml Downloading types_toml-0.10.8.6-py3-none-any.whl (4.5 kB) Collecting responses Downloading responses-0.21.0-py3-none-any.whl (45 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 46.0/46.0 kB 188.9 MB/s eta 0:00:00 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: pip is looking at multiple versions of rollbar to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of raven to determine which version is compatible with other requirements. This could take a while. Collecting raven Downloading raven-6.9.0-py2.py3-none-any.whl (287 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 287.7/287.7 kB 235.7 MB/s eta 0:00:00 Downloading raven-6.8.0-py2.py3-none-any.whl (285 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 285.4/285.4 kB 266.6 MB/s eta 0:00:00 Downloading raven-6.7.0-py2.py3-none-any.whl (284 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 284.5/284.5 kB 260.8 MB/s eta 0:00:00 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: pip is looking at multiple versions of responses to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of supervisor-stdout to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of weblate-schemas to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of rjsmin to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of rcssmin to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of fedora-messaging to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of django-zxcvbn*** determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of diff-match-patch to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of crispy-bootstrap3 to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of zeep to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of wllegal to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of wheel to determine which version is compatible with other requirements. This could take a while. Collecting wheel==0.40.0 Downloading wheel-0.40.0-py3-none-any.whl (64 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.5/64.5 kB 220.4 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of celery[redis] to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of weblate-language-data to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of weblate-fedora-messaging to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of translation-finder to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of translate-toolkit to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of tesserocr to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of supervisor to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of social-auth-core to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of social-auth-app-django to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of siphashc to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of ruamel-yaml to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of redis to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of rapidfuzz to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of pyuca to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of python3-saml to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of python-dateutil to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of python-akismet to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of pygments to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of psycopg2 to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of pip to determine which version is compatible with other requirements. This could take a while. Collecting pip==23.0.1 Downloading pip-23.0.1-py3-none-any.whl (2.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 220.5 MB/s eta 0:00:00 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: pip is looking at multiple versions of raven to determine which version is compatible with other requirements. This could take a while. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: pip is looking at multiple versions of phply to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of openpyxl to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of nh3 to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of mercurial to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of lxml to determine which version is compatible with other requirements. This could take a while. Collecting lxml==4.9.2 Downloading lxml-4.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (7.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.2/7.2 MB 182.6 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of supervisor-stdout to determine which version is compatible with other requirements. This could take a while. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: pip is looking at multiple versions of weblate-schemas to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of rjsmin to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of rcssmin to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of fedora-messaging to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of django-zxcvbn*** determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of diff-match-patch to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of crispy-bootstrap3 to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of zeep to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of wllegal to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of wheel to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of iniparse to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of httpretty to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of hiredis to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of gunicorn to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of git-review to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of gevent to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of djangorestframework to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of django-compressor to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of django-redis to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of django-crispy-forms to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of django-cors-headers to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of django-auth-ldap to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of django-appconf to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of django to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of cryptography to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of cffi to determine which version is compatible with other requirements. This could take a while. Collecting cffi==1.15.1 Downloading cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (462 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 462.6/462.6 kB 46.6 MB/s eta 0:00:00 INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C. INFO: pip is looking at multiple versions of weblate-language-data to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of weblate-fedora-messaging to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of translation-finder to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of translate-toolkit to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of tesserocr to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of supervisor to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of social-auth-core to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of social-auth-app-django to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of siphashc to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of ruamel-yaml to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of redis to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of rapidfuzz to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of pyuca to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of python3-saml to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of python-dateutil to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of python-akismet to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of pygments to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of psycopg2 to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of pip to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of celery to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of borgbackup to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of argon2-cffi to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of aeidon to determine which version is compatible with other requirements. This could take a while. INFO: pip is looking at multiple versions of weblate[all,mysql,zxcvbn] to determine which version is compatible with other requirements. This could take a while. ERROR: Cannot install celery==5.2.7, celery[redis]==5.2.3, celery[redis]==5.2.4 and celery[redis]==5.2.6 because these package versions have conflicting dependencies. The conflict is caused by: The user requested celery==5.2.7 celery[redis] 5.2.6 depends on celery 5.2.6 (from https://files.pythonhosted.org/packages/a0/ed/8a2e381aa9fa6fa5ac6891b0b472e927892f57a39842eff18cc917ceba57/celery-5.2.6-py3-none-any.whl (from https://pypi.org/simple/celery/) (requires-python:>=3.7,)) The user requested celery==5.2.7 celery[redis] 5.2.4 depends on celery 5.2.4 (from https://files.pythonhosted.org/packages/9d/a2/77d4bf33786dba473218067527ec40002cdaeed3599e5377e0f32143bba2/celery-5.2.4-py3-none-any.whl (from https://pypi.org/simple/celery/) (requires-python:>=3.7,)) The user requested celery==5.2.7 celery[redis] 5.2.3 depends on celery 5.2.3 (from https://files.pythonhosted.org/packages/1e/c2/52a01d3f53ddf57c80b011714dd63295c69426121d35d0ff41976b83506c/celery-5.2.3-py3-none-any.whl (from https://pypi.org/simple/celery/) (requires-python:>=3.7,)) To fix this you could try to: 1. loosen the range of package versions you've specified 2. remove package versions to allow pip attempt to solve the dependency conflict ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts ```
notatallshaw commented 1 year ago

This can lead to huge backtracking without providing a clear error where the problem is. I was just hit by this in WeblateOrg/docker#1788 (log at https://github.com/WeblateOrg/docker/actions/runs/4666399591/jobs/8260949502?pr=1788 or in details below).

The problem in this case is that backtracking went into many packages and ended up saying the issue is in celery constraints, while it is actually in Django ones (which the pull request is trying to upgrade).

Reproducer: pip install 'Django==4.2' 'Weblate==4.16.4' 'celery==5.2.7'

Because this specific example hits a more general backtracking slowness rather than just OPs specific issue the amount of time backtracking should be significantly reduced in the next version of Pip.

And it in fact it is, I tested both the number of packages visited (I would normally check the difference between packages visited and packages installed as this is a better indicator of how much "wasted" time there is, but as it results in a resolution impossible I can't do that) and the wall clock time on a second attempt where Pip no longer needs to download any package because everything is cached:

Pip Version Packages Visited Wall Clock Time
Pip 23.0.1 136 179.78s
Pip main (74133f8) 121 25.78s

Better news still in this example Pip main gives a much better ResolutionImpossible error, although I doubt this is guaranteed in general, this probably stems from resolvelib taking better1 steps when backtracking:

The conflict is caused by:
    The user requested Django==4.2
    crispy-bootstrap3 2022.1 depends on django>=3.2
    django-appconf 1.0.3 depends on django
    django-celery-beat 2.4.0 depends on Django<4.2 and >=2.2

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict

  1. For some complicated definition of the word "better", see https://github.com/sarugaku/resolvelib/pull/111 and https://github.com/sarugaku/resolvelib/pull/113 for the gory details
zackmccord commented 1 year ago

I have also encountered this behavior "in the wild," although it did not cause a major slowdown for us.

$ cat test.pip
pytest-cov==3.0.0
coverage==6.3.2

$ python --version
Python 3.8.13

$ python -m pip --version
pip 23.1.2 from XXX/virtualenv/lib/python3.8/site-packages/pip (python 3.8)

$ pip install -Ur test.pip
Requirement already satisfied: pytest-cov==3.0.0 in XXX/virtualenv/lib/python3.8/site-packages (from -r test.pip (line 1)) (3.0.0)
Requirement already satisfied: coverage==6.3.2 in XXX/virtualenv/lib/python3.8/site-packages (from -r test.pip (line 2)) (6.3.2)
Requirement already satisfied: pytest>=4.6 in XXX/virtualenv/lib/python3.8/site-packages (from pytest-cov==3.0.0->-r test.pip (line 1)) (7.1.2)
Collecting coverage[toml]>=5.2.1 (from pytest-cov==3.0.0->-r test.pip (line 1))
  Using cached coverage-7.2.5-cp38-cp38-macosx_10_9_x86_64.whl (200 kB)
INFO: pip is looking at multiple versions of coverage[toml] to determine which version is compatible with other requirements. This could take a while.
  Using cached coverage-7.2.4-cp38-cp38-macosx_10_9_x86_64.whl (200 kB)
  Using cached coverage-7.2.3-cp38-cp38-macosx_10_9_x86_64.whl (199 kB)
  Using cached coverage-7.2.2-cp38-cp38-macosx_10_9_x86_64.whl (199 kB)
  Using cached coverage-7.2.1-cp38-cp38-macosx_10_9_x86_64.whl (199 kB)
  Using cached coverage-7.2.0-cp38-cp38-macosx_10_9_x86_64.whl (199 kB)
  Using cached coverage-7.1.0-cp38-cp38-macosx_10_9_x86_64.whl (198 kB)
  Using cached coverage-7.0.5-cp38-cp38-macosx_10_9_x86_64.whl (197 kB)
INFO: pip is looking at multiple versions of coverage[toml] to determine which version is compatible with other requirements. This could take a while.
  Using cached coverage-7.0.4-cp38-cp38-macosx_10_9_x86_64.whl (197 kB)
  Using cached coverage-7.0.3-cp38-cp38-macosx_10_9_x86_64.whl (196 kB)
  Using cached coverage-7.0.2-cp38-cp38-macosx_10_9_x86_64.whl (196 kB)
  Using cached coverage-7.0.1-cp38-cp38-macosx_10_9_x86_64.whl (187 kB)
  Using cached coverage-7.0.0-cp38-cp38-macosx_10_9_x86_64.whl (187 kB)
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
  Using cached coverage-6.5.0-cp38-cp38-macosx_10_9_x86_64.whl (185 kB)
  Using cached coverage-6.4.4-cp38-cp38-macosx_10_9_x86_64.whl (184 kB)
  Using cached coverage-6.4.3-cp38-cp38-macosx_10_9_x86_64.whl (184 kB)
  Using cached coverage-6.4.2-cp38-cp38-macosx_10_9_x86_64.whl (184 kB)
  Using cached coverage-6.4.1-cp38-cp38-macosx_10_9_x86_64.whl (184 kB)
  Using cached coverage-6.4-cp38-cp38-macosx_10_9_x86_64.whl (183 kB)
  Using cached coverage-6.3.3-cp38-cp38-macosx_10_9_x86_64.whl (183 kB)
Requirement already satisfied: tomli in XXX/virtualenv/lib/python3.8/site-packages (from coverage==6.3.2->-r test.pip (line 2)) (2.0.1)
Requirement already satisfied: attrs>=19.2.0 in XXX/virtualenv/lib/python3.8/site-packages (from pytest>=4.6->pytest-cov==3.0.0->-r test.pip (line 1)) (21.4.0)
Requirement already satisfied: iniconfig in XXX/virtualenv/lib/python3.8/site-packages (from pytest>=4.6->pytest-cov==3.0.0->-r test.pip (line 1)) (2.0.0)
Requirement already satisfied: packaging in XXX/virtualenv/lib/python3.8/site-packages (from pytest>=4.6->pytest-cov==3.0.0->-r test.pip (line 1)) (21.3)
Requirement already satisfied: pluggy<2.0,>=0.12 in XXX/virtualenv/lib/python3.8/site-packages (from pytest>=4.6->pytest-cov==3.0.0->-r test.pip (line 1)) (1.0.0)
Requirement already satisfied: py>=1.8.2 in XXX/virtualenv/lib/python3.8/site-packages (from pytest>=4.6->pytest-cov==3.0.0->-r test.pip (line 1)) (1.11.0)
Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in XXX/virtualenv/lib/python3.8/site-packages (from packaging->pytest>=4.6->pytest-cov==3.0.0->-r test.pip (line 1)) (3.0.9)
sanderr commented 1 year ago

FYI, I am currently working on this and I'm hopeful that I'll be able to open a pull request soon. My current implementation solves all current examples reported in this thread and all tests still succeed but it is naive in the sense that it hinders error reporting (e.g. in the case of pip install 'Django==4.2' 'Weblate==4.16.4' 'celery==5.2.7' reported above). I do have some concrete ideas to improve on it.

bdellegrazie commented 1 year ago

Any idea when this will be released?

sanderr commented 1 year ago

It has been released. Do you still have an issue with it?

bdellegrazie commented 1 year ago

@sanderr still having issues with it for gitlint via pre-commit but perhaps that's virtualenv.

sanderr commented 1 year ago

Ah, there is actually a small bug in it that has been causing issues for gitlint, see #12372. Does that match with the issue you're having? I have a fix that seems to be working but I haven't had the time yet to add test cases and open a pull request. I'm hoping to get to that this weekend. I can't comment on when that would be released though.

bdellegrazie commented 1 year ago

@sanderr yes, that's exactly our issue too, thank you for your efforts.