Pip: Resolution issue when installing a list of wheels

Created on 27 Nov 2020  路  10Comments  路  Source: pypa/pip

Hi folks, a colleague of mine reported a weird issue with the new resolver.

I could confirm it with pip master, today. Python 3.8 on Linux.

Using the following requirements.txt:

asgiref==3.3.1
cffi==1.14.4
cryptography==3.2.1
Django==3.1.3
djangorestframework==3.12.2
drf-jwt==1.17.2
pycparser==2.20
PyJWT==1.7.1
pytz==2020.4
six==1.15.0
sqlparse==0.4.1

pip install -r requirements.txt works fine.

However when building wheels then installing all wheels from the wheelhouse, this fails:

$ pip wheel -r requirements.txt --wheel-dir=wheelhouse
$ pip install wheelhouse/*.whl
Processing ./release/asgiref-3.3.1-py3-none-any.whl
Processing ./release/cffi-1.14.4-cp38-cp38-manylinux1_x86_64.whl
Processing ./release/cryptography-3.2.1-cp35-abi3-manylinux2010_x86_64.whl
Processing ./release/djangorestframework-3.12.2-py3-none-any.whl
Processing ./release/Django-3.1.3-py3-none-any.whl
Processing ./release/drf_jwt-1.17.2-py2.py3-none-any.whl
Processing ./release/pycparser-2.20-py2.py3-none-any.whl
Processing ./release/PyJWT-1.7.1-py2.py3-none-any.whl
Processing ./release/pytz-2020.4-py2.py3-none-any.whl
Processing ./release/six-1.15.0-py2.py3-none-any.whl
Processing ./release/sqlparse-0.4.1-py3-none-any.whl
Collecting PyJWT[crypto]<2.0.0,>=1.5.2
  Using cached PyJWT-1.7.1-py2.py3-none-any.whl (18 kB)
  Using cached PyJWT-1.7.0-py2.py3-none-any.whl (18 kB)
  Using cached PyJWT-1.6.4-py2.py3-none-any.whl (19 kB)
  Using cached PyJWT-1.6.3-py2.py3-none-any.whl (19 kB)
  Using cached PyJWT-1.6.1-py2.py3-none-any.whl (18 kB)
  Using cached PyJWT-1.6.0-py2.py3-none-any.whl (18 kB)
  Using cached PyJWT-1.5.3-py2.py3-none-any.whl (17 kB)
  Using cached PyJWT-1.5.2-py2.py3-none-any.whl (17 kB)
INFO: pip is looking at multiple versions of <Python from Requires-Python> to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of sqlparse to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of six to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of pytz to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of pyjwt to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of pycparser to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of drf-jwt 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 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.
INFO: pip is looking at multiple versions of asgiref to determine which version is compatible with other requirements. This could take a while.
ERROR: Cannot install pyjwt 1.7.1 (from /home/sbi-local/ACSONE/OpenErp/django-lns/release/PyJWT-1.7.1-py2.py3-none-any.whl), pyjwt[crypto]==1.5.2, pyjwt[crypto]==1.5.3, pyjwt[crypto]==1.6.0, pyjwt[crypto]==1.6.1, pyjwt[crypto]==1.6.3, pyjwt[crypto]==1.6.4, pyjwt[crypto]==1.7.0 and pyjwt[crypto]==1.7.1 because these package versions have conflicting dependencies.

The conflict is caused by:
    The user requested pyjwt 1.7.1 (from /home/sbi-local/ACSONE/OpenErp/django-lns/release/PyJWT-1.7.1-py2.py3-none-any.whl)
    pyjwt[crypto] 1.7.1 depends on pyjwt 1.7.1 (from https://files.pythonhosted.org/packages/87/8b/6a9f14b5f781697e51259d81657e6048fd31a113229cf346880bb7545565/PyJWT-1.7.1-py2.py3-none-any.whl#sha256=5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e (from https://pypi.org/simple/pyjwt/))
    The user requested pyjwt 1.7.1 (from /home/sbi-local/ACSONE/OpenErp/django-lns/release/PyJWT-1.7.1-py2.py3-none-any.whl)
    pyjwt[crypto] 1.7.0 depends on pyjwt 1.7.0 (from https://files.pythonhosted.org/packages/02/9b/16c92330f1fb76e3f6372ba6f804d412ec894ee1d9ea31516269b5f6add4/PyJWT-1.7.0-py2.py3-none-any.whl#sha256=00414bfef802aaecd8cc0d5258b6cb87bd8f553c2986c2c5f29b19dd5633aeb7 (from https://pypi.org/simple/pyjwt/))
    The user requested pyjwt 1.7.1 (from /home/sbi-local/ACSONE/OpenErp/django-lns/release/PyJWT-1.7.1-py2.py3-none-any.whl)
    pyjwt[crypto] 1.6.4 depends on pyjwt 1.6.4 (from https://files.pythonhosted.org/packages/93/d1/3378cc8184a6524dc92993090ee8b4c03847c567e298305d6cf86987e005/PyJWT-1.6.4-py2.py3-none-any.whl#sha256=30b1380ff43b55441283cc2b2676b755cca45693ae3097325dea01f3d110628c (from https://pypi.org/simple/pyjwt/))
    The user requested pyjwt 1.7.1 (from /home/sbi-local/ACSONE/OpenErp/django-lns/release/PyJWT-1.7.1-py2.py3-none-any.whl)
    pyjwt[crypto] 1.6.3 depends on pyjwt 1.6.3 (from https://files.pythonhosted.org/packages/77/11/4ccc1f4f8d812a6459e53f4f33107ae5d25babed9e6c1f0c6923b1fa8966/PyJWT-1.6.3-py2.py3-none-any.whl#sha256=d527c3330d83d7278a0a8ef570b7c9c39fbf2c0c1edbe564a1a8a02d5352322b (from https://pypi.org/simple/pyjwt/))
    The user requested pyjwt 1.7.1 (from /home/sbi-local/ACSONE/OpenErp/django-lns/release/PyJWT-1.7.1-py2.py3-none-any.whl)
    pyjwt[crypto] 1.6.1 depends on pyjwt 1.6.1 (from https://files.pythonhosted.org/packages/31/8f/19c302aa9a391dd1fbd249362b749021b88d40fb59af0363939a2250afed/PyJWT-1.6.1-py2.py3-none-any.whl#sha256=bca523ef95586d3a8a5be2da766fe6f82754acba27689c984e28e77a12174593 (from https://pypi.org/simple/pyjwt/))
    The user requested pyjwt 1.7.1 (from /home/sbi-local/ACSONE/OpenErp/django-lns/release/PyJWT-1.7.1-py2.py3-none-any.whl)
    pyjwt[crypto] 1.6.0 depends on pyjwt 1.6.0 (from https://files.pythonhosted.org/packages/fc/fd/02c195aa48beef5e4b018259634dd885fa1a9df351c708a8486e7ddf2216/PyJWT-1.6.0-py2.py3-none-any.whl#sha256=b752500cafd4df9f0dc6efe9063603e36a4e1a5c24fee48234d2949b6606aa59 (from https://pypi.org/simple/pyjwt/))
    The user requested pyjwt 1.7.1 (from /home/sbi-local/ACSONE/OpenErp/django-lns/release/PyJWT-1.7.1-py2.py3-none-any.whl)
    pyjwt[crypto] 1.5.3 depends on pyjwt 1.5.3 (from https://files.pythonhosted.org/packages/8a/a6/4d931a2c77a224d27c78382f4ce8ec07542d4426ea2793bea77a689273c2/PyJWT-1.5.3-py2.py3-none-any.whl#sha256=a4e5f1441e3ca7b382fd0c0b416777ced1f97c64ef0c33bfa39daf38505cfd2f (from https://pypi.org/simple/pyjwt/))
    The user requested pyjwt 1.7.1 (from /home/sbi-local/ACSONE/OpenErp/django-lns/release/PyJWT-1.7.1-py2.py3-none-any.whl)
    pyjwt[crypto] 1.5.2 depends on pyjwt 1.5.2 (from https://files.pythonhosted.org/packages/46/63/9e57342802642c447f0620dea41a18033abbb466af9417543295ab56b8b9/PyJWT-1.5.2-py2.py3-none-any.whl#sha256=9e7d780c30cd03bb0d29510b03e09caa95c6d880b3897450eb0f2d1678d3e5b1 (from https://pypi.org/simple/pyjwt/))

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/user_guide/#fixing-conflicting-dependencies

There are plenty of workarounds (in this case we should use --no-deps of course), but I thought it might be interesting nevertheless as it might reveal something more significant.

new resolver

Most helpful comment

The same error was not seen in pip 20.2.4

Did you enable the new resolver in 20.2.4? That's the relevant change in 20.3, the new resolver is on by default.

All 10 comments

Probably a variant of #8785

Hi All

getting the same error while installing wheel files on EMR

ERROR: Cannot install aiobotocore==1.1.2 and botocore 1.17.63 (from /tmp/pipinstalls/digital-2.2.5/wheelhouse/botocore-1.17.63-py2.py3-none-any.whl) because these package versions have conflicting dependencies.
ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/user_guide/#fixing-conflicting-dependencies

@rakekris could you share the command (and any relevant files) you had run, for getting this error?

@rakekris could you share the command (and any relevant files) you had run, for getting this error?
environment : python 3.7 (occurs in 3.6 as well)

sudo python3 -m pip install --upgrade pip
sudo python3 -m pip install /tmp/pipinstalls/digital-2.2.5/wheelhouse/aiobotocore-1.1.2-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/aiohttp-3.7.3-cp37-cp37m-manylinux2014_x86_64.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/aioitertools-0.7.1-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/async_timeout-3.0.1-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/attrs-20.3.0-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/boto3-1.14.47-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/botocore-1.17.63-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/certifi-2020.11.8-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/chardet-3.0.4-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/click-7.1.2-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/click_configfile-0.2.3-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/configparser-5.0.1-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/croniter-0.3.34-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/decorator-4.4.2-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/digital-2.2.5-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/docutils-0.15.2-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/fsspec-0.8.4-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/future-0.18.2-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/gitdb-4.0.5-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/GitPython-3.1.11-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/idna-2.10-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/importlib_metadata-3.0.0-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/Jinja2-2.11.0-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/jmespath-0.10.0-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/more_itertools-8.6.0-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/multidict-5.0.2-cp37-cp37m-manylinux2014_x86_64.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/natsort-7.1.0-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/networkx-2.4-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/numpy-1.19.4-cp37-cp37m-manylinux2010_x86_64.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/packaging-20.4-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/pandas-1.0.5-cp37-cp37m-manylinux1_x86_64.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/pandasql-0.7.3-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/pluggy-0.13.1-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/prison-0.1.3-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/psycopg2_binary-2.8.5-cp37-cp37m-manylinux1_x86_64.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/py-1.9.0-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/pyfiglet-0.8.post1-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/pygrok-1.0.0-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/pyparsing-2.4.7-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/pytest-5.4.3-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/pytest_runner-5.2-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/python_dateutil-2.8.1-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/pytz-2020.4-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/regex-2020.11.13-cp37-cp37m-manylinux2014_x86_64.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/requests-2.24.0-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/s3fs-0.5.0-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/s3transfer-0.3.3-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/setuptools-50.3.2-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/setuptools_scm-4.1.2-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/sharp-3.0.0.dev34-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/sharp_cli-3.0.0.dev27-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/sharp_drivers-3.0.0.dev98-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/six-1.15.0-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/smmap-3.0.4-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/SQLAlchemy-1.3.20-cp37-cp37m-manylinux2010_x86_64.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/tabulate-0.8.7-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/typing_extensions-3.7.4.3-py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/urllib3-1.25.11-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/wcwidth-0.2.5-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/wheel-0.35.1-py2.py3-none-any.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/wrapt-1.12.1-cp37-cp37m-linux_x86_64.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/yarl-1.6.3-cp37-cp37m-manylinux2014_x86_64.whl /tmp/pipinstalls/digital-2.2.5/wheelhouse/zipp-3.4.0-py3-none-any.whl --upgrade

@rakekris So you're explicitly specifying botocore 1.17.63 but also requesting aiobotocore which declares that it needs a different version. Pip is doing the correct thing and reporting that you have a conflict.

The original report here is different, as it's not about a case where there's an actual version conflict.

@rakekris So you're explicitly specifying botocore 1.17.63 but also requesting aiobotocore which declares that it needs a different version. Pip is doing the correct thing and reporting that you have a conflict.

The original report here is different, as it's not about a case where there's an actual version conflict.

The same error was not seen in pip 20.2.4

@rakekris please see https://pip.pypa.io/en/latest/user_guide/#fixing-conflicting-dependencies.

The same error was not seen in pip 20.2.4

Did you enable the new resolver in 20.2.4? That's the relevant change in 20.3, the new resolver is on by default.

The same error was not seen in pip 20.2.4

Did you enable the new resolver in 20.2.4? That's the relevant change in 20.3, the new resolver is on by default.

No I had not enabled the resolver in 20.2.4, can we disable that in 20.3 ?

@rakekris Please kindly read the documentation page linked above.

Was this page helpful?
0 / 5 - 0 ratings