pip: pip takes too long to resolve conflicting dependencies

What did you want to do? We run the command:

pip install -e .

on a CI node with no previous cache using a virtual environment.

There was NO cache and there were NO previous packages. We are using a new virtual environment

Python 3.7.3

setup.py

        'spacy==2.2.3',  # Also run: # sudo python -m spacy download en
        'sentence-transformers',
        'sentencepiece==0.1.85', 
        'scispacy>=0.2.0',
        'nltk',
        'python-docx',
        'langdetect',
        'fuzzywuzzy==0.15.0',
        'python-Levenshtein==0.12.0',
        'annoy==1.16.3',
        'pyDatalog',
        'srsly==1.0.1',
        'nest_asyncio==1.4.2', 

Output

Collecting Flask==0.12.2
  Using cached Flask-0.12.2-py2.py3-none-any.whl (83 kB)
INFO: pip is looking at multiple versions of apispec to determine which version is compatible with other requirements. This could take a while.
Collecting apispec==0.35.0
  Using cached apispec-0.35.0-py2.py3-none-any.whl (22 kB)
INFO: pip is looking at multiple versions of modelling2 to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of langdetect to determine which version is compatible with other requirements. This could take a while.
Collecting langdetect
  Using cached langdetect-1.0.7.zip (998 kB)
  Using cached langdetect-1.0.6.zip (995 kB)
  Using cached langdetect-1.0.5.zip (993 kB)
  Using cached langdetect-1.0.4.zip (960 kB)
  Using cached langdetect-1.0.3.zip (934 kB)
  Using cached langdetect-1.0.2.zip (934 kB)
  Using cached langdetect-1.0.1.zip (934 kB)
  Using cached langdetect-1.0.0.zip (934 kB)
  Using cached langdetect-0.1.0.zip (924 kB)
INFO: pip is looking at multiple versions of sympy to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of statsmodels 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 pyjwt to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of pika to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of parsimonious to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of pandas to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of multiprocess to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of matplotlib to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of marshmallow to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of language-tags to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of html5lib to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of flask-testing to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of flask-swagger-ui to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of flask-cors to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of flask-compress to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of flask-apispec to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of flask to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of apispec to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of modelling2 to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of langdetect to determine which version is compatible with other requirements. This could take a while.
INFO: pip is looking at multiple versions of conllu to determine which version is compatible with other requirements. This could take a while.
Collecting conllu
  Using cached conllu-4.2.2-py2.py3-none-any.whl (14 kB)
  Using cached conllu-4.2.1-py2.py3-none-any.whl (14 kB)
  Using cached conllu-4.2-py2.py3-none-any.whl (14 kB)
  Using cached conllu-4.1-py2.py3-none-any.whl (14 kB)
  Using cached conllu-4.0-py2.py3-none-any.whl (13 kB)
  Using cached conllu-3.1.1-py2.py3-none-any.whl (14 kB)
  Using cached conllu-3.1-py2.py3-none-any.whl (14 kB)
  Using cached conllu-3.0-py2.py3-none-any.whl (14 kB)
  Using cached conllu-2.3.2-py2.py3-none-any.whl (13 kB)
  Using cached conllu-2.3-py2.py3-none-any.whl (13 kB)
  Using cached conllu-2.2.2-py2.py3-none-any.whl (13 kB)
  Using cached conllu-2.2.1-py2.py3-none-any.whl (12 kB)
  Using cached conllu-2.2-py2.py3-none-any.whl (12 kB)
  Using cached conllu-2.1.1-py2.py3-none-any.whl (12 kB)
  Using cached conllu-2.1-py2.py3-none-any.whl (12 kB)
  Using cached conllu-2.0-py2.py3-none-any.whl (10 kB)
  Using cached conllu-1.5-py2.py3-none-any.whl (9.8 kB)
  Using cached conllu-1.4.1-py2.py3-none-any.whl (9.5 kB)
  Using cached conllu-1.4-py2.py3-none-any.whl (9.5 kB)
  Using cached conllu-1.3.2-py2.py3-none-any.whl (9.3 kB)
  Using cached conllu-1.3.1-py2.py3-none-any.whl (9.3 kB)
  Using cached conllu-1.3-py2.py3-none-any.whl (9.3 kB)
  Using cached conllu-1.2.3-py2.py3-none-any.whl (9.2 kB)
  Using cached conllu-1.2.2-py2.py3-none-any.whl (9.2 kB)
  Using cached conllu-1.2.1-py2.py3-none-any.whl (9.1 kB)
  Using cached conllu-1.2-py2.py3-none-any.whl (9.1 kB)
  Using cached conllu-1.1-py2.py3-none-any.whl (8.8 kB)
  Using cached conllu-1.0.1-py2.py3-none-any.whl (8.3 kB)
  Using cached conllu-1.0-py2.py3-none-any.whl (8.2 kB)
  Using cached conllu-0.11-py2.py3-none-any.whl (6.8 kB)
  Using cached conllu-0.10.7-py2.py3-none-any.whl (6.3 kB)
  Using cached conllu-0.10.6-py2.py3-none-any.whl (6.2 kB)
  Using cached conllu-0.10.5-py2.py3-none-any.whl (6.2 kB)
  Using cached conllu-0.10.4-py2.py3-none-any.whl (6.2 kB)
  Using cached conllu-0.10.3-py3-none-any.whl (5.4 kB)
  Using cached conllu-0.10.2-py3-none-any.whl (5.4 kB)
  Using cached conllu-0.10.1.tar.gz (5.4 kB)
  Using cached conllu-0.10.tar.gz (5.3 kB)
  Using cached conllu-0.9.tar.gz (4.5 kB)
  Using cached conllu-0.8.tar.gz (4.5 kB)
  Using cached conllu-0.7.tar.gz (4.4 kB)
  Using cached conllu-0.6.1.tar.gz (4.3 kB)
  Using cached conllu-0.6.tar.gz (4.2 kB)
  Using cached conllu-0.5.tar.gz (3.8 kB)
  Using cached conllu-0.4.tar.gz (2.1 kB)
  Using cached conllu-0.3.tar.gz (2.0 kB)
  Using cached conllu-0.2-py2.py3-none-any.whl (8.2 kB)
  Using cached conllu-0.1.tar.gz (1.6 kB)
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: pip is looking at multiple versions of conllu 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. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: pip is looking at multiple versions of urllib3 to determine which version is compatible with other requirements. This could take a while.
Collecting urllib3<1.27,>=1.21.1
  Using cached urllib3-1.26.1-py2.py3-none-any.whl (136 kB)
  Using cached urllib3-1.26.0-py2.py3-none-any.whl (136 kB)
  Using cached urllib3-1.25.11-py2.py3-none-any.whl (127 kB)
  Using cached urllib3-1.25.10-py2.py3-none-any.whl (127 kB)
  Using cached urllib3-1.25.9-py2.py3-none-any.whl (126 kB)
  Using cached urllib3-1.25.8-py2.py3-none-any.whl (125 kB)
  Using cached urllib3-1.25.7-py2.py3-none-any.whl (125 kB)
  Using cached urllib3-1.25.6-py2.py3-none-any.whl (125 kB)
  Using cached urllib3-1.25.5-py2.py3-none-any.whl (125 kB)
  Using cached urllib3-1.25.4-py2.py3-none-any.whl (125 kB)
INFO: pip is looking at multiple versions of urllib3 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.
Collecting six>=1.5
  Using cached six-1.15.0-py2.py3-none-any.whl (10 kB)
  Using cached six-1.14.0-py2.py3-none-any.whl (10 kB)
  Using cached six-1.13.0-py2.py3-none-any.whl (10 kB)
  Using cached six-1.12.0-py2.py3-none-any.whl (10 kB)
  Using cached six-1.11.0-py2.py3-none-any.whl (10 kB)
  Using cached six-1.10.0-py2.py3-none-any.whl (10 kB)
  Using cached six-1.9.0-py2.py3-none-any.whl (10 kB)
  Using cached six-1.8.0-py2.py3-none-any.whl (9.7 kB)
  Using cached six-1.7.3-py2.py3-none-any.whl (9.5 kB)
  Using cached six-1.7.2-py2.py3-none-any.whl (9.6 kB)
  Using cached six-1.7.1-py2.py3-none-any.whl (9.6 kB)
  Using cached six-1.7.0-py2.py3-none-any.whl (9.3 kB)
  Using cached six-1.6.1-py2.py3-none-any.whl (8.6 kB)
  Using cached six-1.6.0-py2.py3-none-any.whl (8.5 kB)
  Using cached six-1.5.2-py2.py3-none-any.whl (8.4 kB)
  Using cached six-1.5.1-py2.py3-none-any.whl (8.4 kB)
  Using cached six-1.5.0-py2.py3-none-any.whl (8.2 kB)
INFO: pip is looking at multiple versions of six 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. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
Build timed out (after 210 minutes). Marking the build as aborted.
Build was aborted

Additional information

ipaddress==1.0.23
modelling2==0.11.22-builder.310def657e15f16895db81aa427271b04f08230b
  - apispec [required: ==0.35.0, installed: 0.35.0]
    - PyYAML [required: >=3.10, installed: 5.3.1]
  - colorama [required: >=0.3.9, installed: 0.4.3]
  - cytoolz [required: >=0.10.1, installed: 0.11.0]
    - toolz [required: >=0.8.0, installed: 0.11.1]
  - dataIngest [required: Any, installed: 1.0.0]
    - argcomplete [required: >=0.8.4, installed: 1.12.2]
      - importlib-metadata [required: >=0.23,<4, installed: 3.4.0]
        - typing-extensions [required: >=3.6.4, installed: 3.7.4.3]
        - zipp [required: >=0.5, installed: 3.4.0]
    - boto3 [required: ==1.9.129, installed: 1.9.129]
      - botocore [required: >=1.12.129,<1.13.0, installed: 1.12.129]
        - docutils [required: >=0.10, installed: 0.15.2]
        - jmespath [required: >=0.7.1,<1.0.0, installed: 0.10.0]
        - python-dateutil [required: >=2.1,<3.0.0, installed: 2.8.1]
          - six [required: >=1.5, installed: 1.10.0]
        - urllib3 [required: >=1.20,<1.25, installed: 1.24.1]
      - jmespath [required: >=0.7.1,<1.0.0, installed: 0.10.0]
      - s3transfer [required: >=0.2.0,<0.3.0, installed: 0.2.1]
        - botocore [required: >=1.12.36,<2.0.0, installed: 1.12.129]
          - docutils [required: >=0.10, installed: 0.15.2]
          - jmespath [required: >=0.7.1,<1.0.0, installed: 0.10.0]
          - python-dateutil [required: >=2.1,<3.0.0, installed: 2.8.1]
            - six [required: >=1.5, installed: 1.10.0]
          - urllib3 [required: >=1.20,<1.25, installed: 1.24.1]
    - botocore [required: ==1.12.129, installed: 1.12.129]
      - docutils [required: >=0.10, installed: 0.15.2]
      - jmespath [required: >=0.7.1,<1.0.0, installed: 0.10.0]
      - python-dateutil [required: >=2.1,<3.0.0, installed: 2.8.1]
        - six [required: >=1.5, installed: 1.10.0]
      - urllib3 [required: >=1.20,<1.25, installed: 1.24.1]
    - cachetools [required: ==2.1.0, installed: 2.1.0]
    - Cython [required: ==0.28.5, installed: 0.28.5]
    - fuzzywuzzy [required: >=0.15.0, installed: 0.15.0]
    - llvmlite [required: <0.32.0, installed: 0.31.0]
    - lxml [required: >=3.3.3, installed: 4.6.2]
    - Markdown [required: >=2.0.1, installed: 3.3.3]
      - importlib-metadata [required: Any, installed: 3.4.0]
        - typing-extensions [required: >=3.6.4, installed: 3.7.4.3]
        - zipp [required: >=0.5, installed: 3.4.0]
    - numba [required: ==0.47.0, installed: 0.47.0]
      - llvmlite [required: >=0.31.0dev0, installed: 0.31.0]
      - numpy [required: Any, installed: 1.16.1]
      - setuptools [required: Any, installed: 39.0.1]
    - numpy [required: ==1.16.1, installed: 1.16.1]
    - pandas [required: >=0.22.0, installed: 0.24.2]
      - numpy [required: >=1.12.0, installed: 1.16.1]
      - python-dateutil [required: >=2.5.0, installed: 2.8.1]
        - six [required: >=1.5, installed: 1.10.0]
      - pytz [required: >=2011k, installed: 2020.5]
    - paramiko [required: >=2.4.1, installed: 2.4.1]
      - bcrypt [required: >=3.1.3, installed: 3.2.0]
        - cffi [required: >=1.1, installed: 1.14.4]
          - pycparser [required: Any, installed: 2.20]
        - six [required: >=1.4.1, installed: 1.10.0]
      - cryptography [required: >=1.5, installed: 3.3.1]
        - cffi [required: >=1.12, installed: 1.14.4]
          - pycparser [required: Any, installed: 2.20]
        - six [required: >=1.4.1, installed: 1.10.0]
      - pyasn1 [required: >=0.1.7, installed: 0.4.8]
      - pynacl [required: >=1.0.1, installed: 1.4.0]
        - cffi [required: >=1.4.1, installed: 1.14.4]
          - pycparser [required: Any, installed: 2.20]
        - six [required: Any, installed: 1.10.0]
    - pathlib2 [required: >=2.1.0, installed: 2.3.5]
      - six [required: Any, installed: 1.10.0]
    - psycopg2-binary [required: >=2.7.3.2, installed: 2.8.6]
    - pyhocon [required: >=0.3.33, installed: 0.3.57]
      - pyparsing [required: >=2.0.3, installed: 2.4.7]
    - python-dateutil [required: >=2.6.0, installed: 2.8.1]
      - six [required: >=1.5, installed: 1.10.0]
    - requests [required: Any, installed: 2.25.1]
      - certifi [required: >=2017.4.17, installed: 2020.12.5]
      - chardet [required: >=3.0.2,<5, installed: 3.0.4]
      - idna [required: >=2.5,<3, installed: 2.10]
      - urllib3 [required: >=1.21.1,<1.27, installed: 1.24.1]
    - sqlalchemy [required: >=1.1.5, installed: 1.3.22]
    - statsmodels [required: ==0.9.0, installed: 0.9.0]
      - pandas [required: Any, installed: 0.24.2]
        - numpy [required: >=1.12.0, installed: 1.16.1]
        - python-dateutil [required: >=2.5.0, installed: 2.8.1]
          - six [required: >=1.5, installed: 1.10.0]
        - pytz [required: >=2011k, installed: 2020.5]
      - patsy [required: Any, installed: 0.5.1]
        - numpy [required: >=1.4, installed: 1.16.1]
        - six [required: Any, installed: 1.10.0]
    - urllib3 [required: ==1.24.1, installed: 1.24.1]
  - dill [required: >=0.2.7.1, installed: 0.3.3]
  - diskcache [required: <5.0.0, installed: 4.1.0]
  - Flask [required: ==0.12.2, installed: 0.12.2]
    - click [required: >=2.0, installed: 7.1.2]
    - itsdangerous [required: >=0.21, installed: 1.1.0]
    - Jinja2 [required: >=2.4, installed: 2.11.2]
      - MarkupSafe [required: >=0.23, installed: 1.1.1]
    - Werkzeug [required: >=0.7, installed: 0.16.1]
  - flask-apispec [required: ==0.6.0.post0, installed: 0.6.0.post0]
    - apispec [required: >=0.17.0, installed: 0.35.0]
      - PyYAML [required: >=3.10, installed: 5.3.1]
    - flask [required: >=0.10.1, installed: 0.12.2]
      - click [required: >=2.0, installed: 7.1.2]
      - itsdangerous [required: >=0.21, installed: 1.1.0]
      - Jinja2 [required: >=2.4, installed: 2.11.2]
        - MarkupSafe [required: >=0.23, installed: 1.1.1]
      - Werkzeug [required: >=0.7, installed: 0.16.1]
    - marshmallow [required: >=2.0.0, installed: 3.0.0b12]
    - six [required: >=1.9.0, installed: 1.10.0]
    - webargs [required: >=0.18.0, installed: 1.8.1]
      - marshmallow [required: >=2.7.0, installed: 3.0.0b12]
  - Flask-Compress [required: ==1.4.0, installed: 1.4.0]
    - Flask [required: Any, installed: 0.12.2]
      - click [required: >=2.0, installed: 7.1.2]
      - itsdangerous [required: >=0.21, installed: 1.1.0]
      - Jinja2 [required: >=2.4, installed: 2.11.2]
        - MarkupSafe [required: >=0.23, installed: 1.1.1]
      - Werkzeug [required: >=0.7, installed: 0.16.1]
  - Flask-Cors [required: ==3.0.3, installed: 3.0.3]
    - Flask [required: >=0.9, installed: 0.12.2]
      - click [required: >=2.0, installed: 7.1.2]
      - itsdangerous [required: >=0.21, installed: 1.1.0]
      - Jinja2 [required: >=2.4, installed: 2.11.2]
        - MarkupSafe [required: >=0.23, installed: 1.1.1]
      - Werkzeug [required: >=0.7, installed: 0.16.1]
    - Six [required: Any, installed: 1.10.0]
  - flask-swagger-ui [required: ==3.20.9, installed: 3.20.9]
    - flask [required: Any, installed: 0.12.2]
      - click [required: >=2.0, installed: 7.1.2]
      - itsdangerous [required: >=0.21, installed: 1.1.0]
      - Jinja2 [required: >=2.4, installed: 2.11.2]
        - MarkupSafe [required: >=0.23, installed: 1.1.1]
      - Werkzeug [required: >=0.7, installed: 0.16.1]
  - Flask-Testing [required: ==0.7.1, installed: 0.7.1]
    - Flask [required: Any, installed: 0.12.2]
      - click [required: >=2.0, installed: 7.1.2]
      - itsdangerous [required: >=0.21, installed: 1.1.0]
      - Jinja2 [required: >=2.4, installed: 2.11.2]
        - MarkupSafe [required: >=0.23, installed: 1.1.1]
      - Werkzeug [required: >=0.7, installed: 0.16.1]
  - fuzzywuzzy [required: ==0.15.0, installed: 0.15.0]
  - googletrans [required: Any, installed: 3.0.0]
    - httpx [required: ==0.13.3, installed: 0.13.3]
      - certifi [required: Any, installed: 2020.12.5]
      - chardet [required: ==3.*, installed: 3.0.4]
      - hstspreload [required: Any, installed: 2020.12.22]
      - httpcore [required: ==0.9.*, installed: 0.9.1]
        - h11 [required: >=0.8,<0.10, installed: 0.9.0]
        - h2 [required: ==3.*, installed: 3.2.0]
          - hpack [required: >=3.0,<4, installed: 3.0.0]
          - hyperframe [required: >=5.2.0,<6, installed: 5.2.0]
        - sniffio [required: ==1.*, installed: 1.2.0]
      - idna [required: ==2.*, installed: 2.10]
      - rfc3986 [required: >=1.3,<2, installed: 1.4.0]
      - sniffio [required: Any, installed: 1.2.0]
  - html5lib [required: ==0.9999999, installed: 0.9999999]
    - six [required: Any, installed: 1.10.0]
  - ipdb [required: Any, installed: 0.13.4]
    - ipython [required: >=5.1.0, installed: 7.19.0]
      - backcall [required: Any, installed: 0.2.0]
      - decorator [required: Any, installed: 4.4.2]
      - jedi [required: >=0.10, installed: 0.18.0]
        - parso [required: >=0.8.0,<0.9.0, installed: 0.8.1]
      - pexpect [required: >4.3, installed: 4.8.0]
        - ptyprocess [required: >=0.5, installed: 0.7.0]
      - pickleshare [required: Any, installed: 0.7.5]
      - prompt-toolkit [required: >=2.0.0,<3.1.0,!=3.0.1,!=3.0.0, installed: 3.0.14]
        - wcwidth [required: Any, installed: 0.2.5]
      - pygments [required: Any, installed: 2.7.4]
      - setuptools [required: >=18.5, installed: 39.0.1]
      - traitlets [required: >=4.2, installed: 5.0.5]
        - ipython-genutils [required: Any, installed: 0.2.0]
    - setuptools [required: Any, installed: 39.0.1]
  - joblib [required: ==0.11, installed: 0.11]
  - language-tags [required: ==0.4.3, installed: 0.4.3]
    - six [required: Any, installed: 1.10.0]
  - llvmlite [required: !=0.32.0, installed: 0.31.0]
  - marshmallow [required: ==3.0.0b12, installed: 3.0.0b12]
  - matplotlib [required: ==2.1.0, installed: 2.1.0]
    - cycler [required: >=0.10, installed: 0.10.0]
      - six [required: Any, installed: 1.10.0]
    - numpy [required: >=1.7.1, installed: 1.16.1]
    - pyparsing [required: >=2.0.1,!=2.1.6,!=2.1.2,!=2.0.4, installed: 2.4.7]
    - python-dateutil [required: >=2.0, installed: 2.8.1]
      - six [required: >=1.5, installed: 1.10.0]
    - pytz [required: Any, installed: 2020.5]
    - six [required: >=1.10, installed: 1.10.0]
  - multiprocess [required: ==0.70.4, installed: 0.70.4]
    - dill [required: >=0.2.5, installed: 0.3.3]
  - numexpr [required: >=2.6.2, installed: 2.7.2]
    - numpy [required: >=1.7, installed: 1.16.1]
  - numpy [required: ==1.16.1, installed: 1.16.1]
  - paho-mqtt [required: >=1.4.0, installed: 1.5.1]
  - pandas [required: ==0.24.2, installed: 0.24.2]
    - numpy [required: >=1.12.0, installed: 1.16.1]
    - python-dateutil [required: >=2.5.0, installed: 2.8.1]
      - six [required: >=1.5, installed: 1.10.0]
    - pytz [required: >=2011k, installed: 2020.5]
  - parsimonious [required: ==0.8.1, installed: 0.8.1]
    - six [required: >=1.9.0, installed: 1.10.0]
  - pika [required: ==1.1.0, installed: 1.1.0]
  - psutil [required: Any, installed: 5.8.0]
  - psutil [required: >=5.2.2, installed: 5.8.0]
  - psycopg2-binary [required: >=2.8.4, installed: 2.8.6]
  - pydevd-pycharm [required: ~=192.6603.28, installed: 192.6603.34]
  - pyjwt [required: ==1.5.3, installed: 1.5.3]
  - python-Levenshtein [required: ==0.12.0, installed: 0.12.0]
    - setuptools [required: Any, installed: 39.0.1]
  - redis [required: ==2.10.6, installed: 2.10.6]
  - requests [required: Any, installed: 2.25.1]
    - certifi [required: >=2017.4.17, installed: 2020.12.5]
    - chardet [required: >=3.0.2,<5, installed: 3.0.4]
    - idna [required: >=2.5,<3, installed: 2.10]
    - urllib3 [required: >=1.21.1,<1.27, installed: 1.24.1]
  - riemann-client [required: Any, installed: 6.5.0]
    - click [required: >=3.1, installed: 7.1.2]
    - protobuf [required: >=3.2.0,<4.0.0, installed: 3.14.0]
      - six [required: >=1.9, installed: 1.10.0]
  - scikit-learn [required: >=0.20.3, installed: 0.24.1]
    - joblib [required: >=0.11, installed: 0.11]
    - numpy [required: >=1.13.3, installed: 1.16.1]
    - scipy [required: >=0.19.1, installed: 1.2.0]
      - numpy [required: >=1.8.2, installed: 1.16.1]
    - threadpoolctl [required: >=2.0.0, installed: 2.1.0]
  - scipy [required: ==1.2.0, installed: 1.2.0]
    - numpy [required: >=1.8.2, installed: 1.16.1]
  - six [required: ==1.10.0, installed: 1.10.0]
  - SQLAlchemy [required: >=1.2.17, installed: 1.3.22]
  - statsmodels [required: ==0.9.0, installed: 0.9.0]
    - pandas [required: Any, installed: 0.24.2]
      - numpy [required: >=1.12.0, installed: 1.16.1]
      - python-dateutil [required: >=2.5.0, installed: 2.8.1]
        - six [required: >=1.5, installed: 1.10.0]
      - pytz [required: >=2011k, installed: 2020.5]
    - patsy [required: Any, installed: 0.5.1]
      - numpy [required: >=1.4, installed: 1.16.1]
      - six [required: Any, installed: 1.10.0]
  - sympy [required: ==1.3, installed: 1.3]
    - mpmath [required: >=0.19, installed: 1.1.0]
  - tabulate [required: Any, installed: 0.8.7]
  - urllib3 [required: ==1.24.1, installed: 1.24.1]
  - watchdog [required: ==0.10.2, installed: 0.10.2]
    - pathtools [required: >=0.1.1, installed: 0.1.2]
  - webargs [required: ==1.8.1, installed: 1.8.1]
    - marshmallow [required: >=2.7.0, installed: 3.0.0b12]
  - Werkzeug [required: ==0.16.1, installed: 0.16.1]
pipdeptree==2.0.0
  - pip [required: >=6.0.0, installed: 21.0]
pkg-resources==0.0.0
pycfg==0.0.1
  - argcomplete [required: Any, installed: 1.12.2]
    - importlib-metadata [required: >=0.23,<4, installed: 3.4.0]
      - typing-extensions [required: >=3.6.4, installed: 3.7.4.3]
      - zipp [required: >=0.5, installed: 3.4.0]
  - awscli [required: Any, installed: 1.18.219]
    - botocore [required: ==1.19.59, installed: 1.12.129]
      - docutils [required: >=0.10, installed: 0.15.2]
      - jmespath [required: >=0.7.1,<1.0.0, installed: 0.10.0]
      - python-dateutil [required: >=2.1,<3.0.0, installed: 2.8.1]
        - six [required: >=1.5, installed: 1.10.0]
      - urllib3 [required: >=1.20,<1.25, installed: 1.24.1]
    - colorama [required: >=0.2.5,<0.4.4, installed: 0.4.3]
    - docutils [required: >=0.10,<0.16, installed: 0.15.2]
    - PyYAML [required: >=3.10,<5.4, installed: 5.3.1]
    - rsa [required: >=3.1.2,<=4.5.0, installed: 4.5]
      - pyasn1 [required: >=0.1.3, installed: 0.4.8]
    - s3transfer [required: >=0.3.0,<0.4.0, installed: 0.2.1]
      - botocore [required: >=1.12.36,<2.0.0, installed: 1.12.129]
        - docutils [required: >=0.10, installed: 0.15.2]
        - jmespath [required: >=0.7.1,<1.0.0, installed: 0.10.0]
        - python-dateutil [required: >=2.1,<3.0.0, installed: 2.8.1]
          - six [required: >=1.5, installed: 1.10.0]
        - urllib3 [required: >=1.20,<1.25, installed: 1.24.1]
  - boto3 [required: Any, installed: 1.9.129]
    - botocore [required: >=1.12.129,<1.13.0, installed: 1.12.129]
      - docutils [required: >=0.10, installed: 0.15.2]
      - jmespath [required: >=0.7.1,<1.0.0, installed: 0.10.0]
      - python-dateutil [required: >=2.1,<3.0.0, installed: 2.8.1]
        - six [required: >=1.5, installed: 1.10.0]
      - urllib3 [required: >=1.20,<1.25, installed: 1.24.1]
    - jmespath [required: >=0.7.1,<1.0.0, installed: 0.10.0]
    - s3transfer [required: >=0.2.0,<0.3.0, installed: 0.2.1]
      - botocore [required: >=1.12.36,<2.0.0, installed: 1.12.129]
        - docutils [required: >=0.10, installed: 0.15.2]
        - jmespath [required: >=0.7.1,<1.0.0, installed: 0.10.0]
        - python-dateutil [required: >=2.1,<3.0.0, installed: 2.8.1]
          - six [required: >=1.5, installed: 1.10.0]
        - urllib3 [required: >=1.20,<1.25, installed: 1.24.1]
  - botocore [required: Any, installed: 1.12.129]
    - docutils [required: >=0.10, installed: 0.15.2]
    - jmespath [required: >=0.7.1,<1.0.0, installed: 0.10.0]
    - python-dateutil [required: >=2.1,<3.0.0, installed: 2.8.1]
      - six [required: >=1.5, installed: 1.10.0]
    - urllib3 [required: >=1.20,<1.25, installed: 1.24.1]
  - cryptography [required: Any, installed: 3.3.1]
    - cffi [required: >=1.12, installed: 1.14.4]
      - pycparser [required: Any, installed: 2.20]
    - six [required: >=1.4.1, installed: 1.10.0]
  - ecdsa [required: Any, installed: 0.16.1]
    - six [required: >=1.9.0, installed: 1.10.0]
  - ecdsa [required: Any, installed: 0.16.1]
    - six [required: >=1.9.0, installed: 1.10.0]
  - graphyte [required: Any, installed: 1.6.0]
  - jedi [required: ==0.9.0, installed: 0.18.0]
    - parso [required: >=0.8.0,<0.9.0, installed: 0.8.1]
  - jmespath [required: Any, installed: 0.10.0]
  - munch [required: Any, installed: 2.5.0]
    - six [required: Any, installed: 1.10.0]
  - paho-mqtt [required: Any, installed: 1.5.1]
  - paramiko [required: ==2.4.1, installed: 2.4.1]
    - bcrypt [required: >=3.1.3, installed: 3.2.0]
      - cffi [required: >=1.1, installed: 1.14.4]
        - pycparser [required: Any, installed: 2.20]
      - six [required: >=1.4.1, installed: 1.10.0]
    - cryptography [required: >=1.5, installed: 3.3.1]
      - cffi [required: >=1.12, installed: 1.14.4]
        - pycparser [required: Any, installed: 2.20]
      - six [required: >=1.4.1, installed: 1.10.0]
    - pyasn1 [required: >=0.1.7, installed: 0.4.8]
    - pynacl [required: >=1.0.1, installed: 1.4.0]
      - cffi [required: >=1.4.1, installed: 1.14.4]
        - pycparser [required: Any, installed: 2.20]
      - six [required: Any, installed: 1.10.0]
  - psycopg2-binary [required: >=2.7.3.2, installed: 2.8.6]
  - pycrypto [required: Any, installed: 2.6.1]
  - pyopenssl [required: Any, installed: 20.0.1]
    - cryptography [required: >=3.2, installed: 3.3.1]
      - cffi [required: >=1.12, installed: 1.14.4]
        - pycparser [required: Any, installed: 2.20]
      - six [required: >=1.4.1, installed: 1.10.0]
    - six [required: >=1.5.2, installed: 1.10.0]
  - python-dateutil [required: >=2.5.2, installed: 2.8.1]
    - six [required: >=1.5, installed: 1.10.0]
  - pytz [required: Any, installed: 2020.5]
  - redis [required: Any, installed: 2.10.6]
  - requests [required: Any, installed: 2.25.1]
    - certifi [required: >=2017.4.17, installed: 2020.12.5]
    - chardet [required: >=3.0.2,<5, installed: 3.0.4]
    - idna [required: >=2.5,<3, installed: 2.10]
    - urllib3 [required: >=1.21.1,<1.27, installed: 1.24.1]
  - requests [required: Any, installed: 2.25.1]
    - certifi [required: >=2017.4.17, installed: 2020.12.5]
    - chardet [required: >=3.0.2,<5, installed: 3.0.4]
    - idna [required: >=2.5,<3, installed: 2.10]
    - urllib3 [required: >=1.21.1,<1.27, installed: 1.24.1]
  - s3transfer [required: Any, installed: 0.2.1]
    - botocore [required: >=1.12.36,<2.0.0, installed: 1.12.129]
      - docutils [required: >=0.10, installed: 0.15.2]
      - jmespath [required: >=0.7.1,<1.0.0, installed: 0.10.0]
      - python-dateutil [required: >=2.1,<3.0.0, installed: 2.8.1]
        - six [required: >=1.5, installed: 1.10.0]
      - urllib3 [required: >=1.20,<1.25, installed: 1.24.1]
  - urllib3 [required: Any, installed: 1.24.1]
pyswiplus==0.0.2
wheel==0.36.2Warning!!! Possibly conflicting dependencies found:
* awscli==1.18.219
 - botocore [required: ==1.19.59, installed: 1.12.129]
 - s3transfer [required: >=0.3.0,<0.4.0, installed: 0.2.1]
* pycfg==0.0.1
 - jedi [required: ==0.9.0, installed: 0.18.0]

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Reactions: 7
  • Comments: 21 (15 by maintainers)

Most upvoted comments

@uranusjr I am not saying pip must use the old resolver. I am saying: If the new resolver cannot solve something because there are 1 or more bugs somewhere on the dependent packages, it should behave for that execution as the old resolver. Or at least pick something. And print a warning.

I recognize the new resolver is predictable and better. Still, there are scenarios like the one I reported where this resolver does not work. It was running for 3 hours and could not install all the dependencies!

Is it unreasonable to pick the best candidate package on those cases? The new resolver does not event report which package is unsolvable.

It has to be a better solution for this. And we are not the only ones having problems.

If picking one version of a package is not acceptable when the resolver cannot resolve, please suggest some alternative: print the package having issues? Restarting the installation using the old resolver?

Being unable to install a project with new versions of pip does not seem a solution.

The old resolver “works” in the same sense that a random person assess situations faster than an expert. The rando guesses randomly, while the expert needs to actually analyse the situation. If the old resolver gets things right, you’re lucky. But that’s not a very useful baseline to evaluate performance.

Someone just posted an example here of azure-cli with Python 3.9 on Linux but then deleted the comment. I tried in a fresh virtual environment but wasn’t albe to reproduce.

In general I think this issue should be closed, all reported and reproducible examples were fixed by https://github.com/pypa/pip/issues/10479

New examples should be new issues, and feel free to CC me and I’ll check if I can reproduce and see what the issue is.

@daniellepintz They’re working on making improvements to pip’s behaviour in this area, and I believe that was a comment about the improved behaviour they’re seeing on the local in-development copy of pip that they have.

Yeah, I’m not sure that the breadth first search would be better in all/most cases. I think the main thing is collecting all packages where there can only be 1 possible version installed and then trying not to be “dumb” in the search methodology through the remaining packages (breadth first was my first idea but I have other ideas).

Understood on the problems you’ve outlined, it’s hard to know if you’re making a net positive or a net negative or if you’ve made certain edge cases 1000x worse. But I have some ideas on testing this as well.

I’ll start taking a look at the resolver.resolve and see if I can figure out how to tweak the implementation to test ideas.

@uranusjr Maybe I’m being naive but it seems looking at the above example pip should be able to fail / resolve much faster.

Here is the test case:

from setuptools import setup

setup(
    name="foo",
    version="1.0",
    install_requires=[
        'spacy==2.3.5',
        'spacy-pkuseg'
    ]
)

Currently as explained above pip gets stuck here. By hand I can resolve this as impossible by doing the following:

  1. Perform a search on the requirements looking for where only a single version of the package is available.
  2. Collect dependencies of packages where only a single version is available, repeat step 1 until all packages where only a single version available have had their requirements collected.
  3. Check for any conflicts in the set of all dependencies, if there are then the resolution is impossible
  4. Performing a breadth first search on the requirements collected iterate through each package one at a time.
  5. Either: 5a. Exhaust all versions of a particular package and throw ResolutionImpossible 5b. Find the more recent version of the package which matches the requirements and continue with step 4 going to the next package in the breadth first search.

In this example it would look like this:

  • spacy==2.3.5 has one version available on PyPi, collect requirements: “murmurhash>=0.28.0,<1.1.0”, “cymem>=2.0.2,<2.1.0”, “preshed>=3.0.2,❤️.1.0”, “thinc>=7.4.1,<7.5.0”, “blis>=0.4.0,<0.8.0”, “wasabi>=0.4.0,<1.1.0”, “srsly>=1.0.2,<1.1.0”, “catalogue>=0.0.7,<1.1.0”, “tqdm>=4.38.0,<5.0.0”, “setuptools”, “numpy>=1.15.0”, “plac>=0.9.6,<1.2.0”, “requests>=2.13.0,❤️.0.0”
  • spacy-pkuseg has multiple versions available on PyPi, not collecting any requirements yet
  • All of these have multiple versions available on PyPi so not collecting yet: “murmurhash>=0.28.0,<1.1.0”, “cymem>=2.0.2,<2.1.0”, “preshed>=3.0.2,❤️.1.0”, “thinc>=7.4.1,<7.5.0”, “blis>=0.4.0,<0.8.0”, “wasabi>=0.4.0,<1.1.0”, “srsly>=1.0.2,<1.1.0”, “catalogue>=0.0.7,<1.1.0”, “tqdm>=4.38.0,<5.0.0”, “setuptools”, “numpy>=1.15.0”, “plac>=0.9.6,<1.2.0”, “requests>=2.13.0,❤️.0.0”
  • All packages which have only 1 available version have had their requirements collected, are there any conflicts? No
  • Performing a breadth first search on remaining packages (spacy-pkuseg -> requirements of spacy(murmurhash -> cymem -> …) -> requirements of spacy-pkuseg (…) -> requirements of murmurhash(…) --> …)
  • Collecting requirements of latest version of spacy-pkuseg (0.0.28): “cython>=0.25”, “numpy>=1.16.0”, “srsly>=2.3.0,❤️.0.0”
  • Any conflicts? Yes, these 2 are logically impossible: “srsly>=2.3.0,❤️.0.0” and “srsly>=1.0.2,<1.1.0”
  • Collecting requirements of next latest version of spacy-pkuseg (0.0.27): “cython”, “numpy>=1.16.0”, “srsly>=2.3.0,❤️.0.0”
  • Any conflicts? Yes, these 2 are logically impossible: “srsly>=2.3.0,❤️.0.0” and “srsly>=1.0.2,<1.1.0”
  • Collecting requirements of next latest version of spacy-pkuseg (0.0.26): “cython”, “numpy>=1.16.0”, “srsly>=2.3.0,❤️.0.0”
  • Any conflicts? Yes, these 2 are logically impossible: “srsly>=2.3.0,❤️.0.0” and “srsly>=1.0.2,<1.1.0”
  • No more versions of spacy-pkuseg available, resolution impossible!

Would this breadth first search through the requirements decency tree not be a much faster resolution in lots of failure cases? Or am I being naive in the scope of the problem or the complexity to implement?