Pip: Improving new resolver output when backtracking choices

Created on 28 May 2020  ·  18Comments  ·  Source: pypa/pip

Environment

  • pip version: pip 20.2b1
  • Python version: all
  • OS: all

Description

pip's new resolver's output is repeating Collecting XYZ for the same requirement multiple times.

Expected behavior

pip's output should not have Collecting XYZ multiple times.

How to Reproduce

  1. Make a clean virtual environment
  2. Run pip install --unstable-feature=resolver 'pyrax==1.9.8'

Output

Collecting pyrax==1.9.8
  Using cached pyrax-1.9.8-py2.py3-none-any.whl (346 kB)
Requirement already satisfied: six<2,>=1.9.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from pyrax==1.9.8) (1.14.0)
Collecting python-novaclient==2.27.0
  Using cached python_novaclient-2.27.0-py2.py3-none-any.whl (312 kB)
Collecting PrettyTable<0.8,>=0.7
  Using cached prettytable-0.7.2.zip (28 kB)
Collecting iso8601>=0.1.9
  Using cached iso8601-0.1.12-py3-none-any.whl (12 kB)
Collecting pbr<2.0,>=1.6
  Using cached pbr-1.10.0-py2.py3-none-any.whl (96 kB)
Collecting rackspace-novaclient
  Using cached rackspace-novaclient-2.1.tar.gz (1.7 kB)
Collecting ip_associations_python_novaclient_ext
  Using cached ip_associations_python_novaclient_ext-0.2.tar.gz (2.4 kB)
Collecting rackspace-auth-openstack
  Using cached rackspace-auth-openstack-1.3.tar.gz (6.8 kB)
Collecting os_diskconfig_python_novaclient_ext
  Using cached os_diskconfig_python_novaclient_ext-0.1.3.tar.gz (2.5 kB)
Collecting rax_scheduled_images_python_novaclient_ext
  Using cached rax_scheduled_images_python_novaclient_ext-0.3.1.tar.gz (2.9 kB)
Collecting os_networksv2_python_novaclient_ext
  Using cached os_networksv2_python_novaclient_ext-0.26.tar.gz (2.3 kB)
Collecting rax_default_network_flags_python_novaclient_ext
  Using cached rax_default_network_flags_python_novaclient_ext-0.4.0.tar.gz (2.5 kB)
Collecting os_virtual_interfacesv2_python_novaclient_ext
  Using cached os_virtual_interfacesv2_python_novaclient_ext-0.20.tar.gz (2.6 kB)
Collecting Babel>=1.3
  Using cached Babel-2.8.0-py2.py3-none-any.whl (8.6 MB)
Collecting argparse
  Using cached argparse-1.4.0-py2.py3-none-any.whl (23 kB)
Collecting pytz>=2015.7
  Using cached pytz-2020.1-py2.py3-none-any.whl (510 kB)
Collecting mock
  Using cached mock-4.0.2-py3-none-any.whl (28 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-4.0.0-py3-none-any.whl (397 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.22.0-py2.py3-none-any.whl (397 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.21.0-py2.py3-none-any.whl (395 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.20.0-py2.py3-none-any.whl (394 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.19.1-py2.py3-none-any.whl (394 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.19.0-py2.py3-none-any.whl (394 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.18.0-py2.py3-none-any.whl (393 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.17.0-py2.py3-none-any.whl (382 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.16.0-py2.py3-none-any.whl (376 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.15.1-py2.py3-none-any.whl (385 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.15.0-py2.py3-none-any.whl (378 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.14.0-py2.py3-none-any.whl (372 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.13.1-py2.py3-none-any.whl (381 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.13.0-py2.py3-none-any.whl (374 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.12.0-py2.py3-none-any.whl (374 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.11.0-py2.py3-none-any.whl (372 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.10.0-py2.py3-none-any.whl (369 kB)
Collecting positional>=1.1.1
  Using cached positional-1.2.1.tar.gz (16 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.32.0-py2.py3-none-any.whl (43 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.31.0-py2.py3-none-any.whl (43 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.30.1-py2.py3-none-any.whl (42 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.30.0-py2.py3-none-any.whl (42 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.29.0-py2.py3-none-any.whl (37 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.28.0-py2.py3-none-any.whl (39 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.27.1-py2.py3-none-any.whl (39 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.27.0-py2.py3-none-any.whl (39 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.26.0-py2.py3-none-any.whl (39 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.25.2-py2.py3-none-any.whl (42 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.25.1-py2.py3-none-any.whl (39 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.25.0-py2.py3-none-any.whl (39 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.24.0-py2.py3-none-any.whl (39 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.23.0-py2.py3-none-any.whl (39 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.22.0-py2.py3-none-any.whl (39 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.21.0-py2.py3-none-any.whl (39 kB)
Collecting stevedore>=1.20.0
  Using cached stevedore-1.20.1-py2.py3-none-any.whl (39 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-2.0.1-py3-none-any.whl (23 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-2.0.0-py3-none-any.whl (23 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-1.22.0-py2.py3-none-any.whl (23 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-1.21.0-py2.py3-none-any.whl (23 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-1.20.0-py2.py3-none-any.whl (18 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-1.19.0-py2.py3-none-any.whl (20 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-1.18.0-py2.py3-none-any.whl (20 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-1.17.2-py2.py3-none-any.whl (23 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-1.17.1-py2.py3-none-any.whl (20 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-1.17.0-py2.py3-none-any.whl (20 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-1.16.0-py2.py3-none-any.whl (20 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-1.15.0-py2.py3-none-any.whl (20 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-1.14.0-py2.py3-none-any.whl (20 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-1.13.0-py2.py3-none-any.whl (20 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-1.12.0-py2.py3-none-any.whl (20 kB)
Collecting debtcollector>=1.2.0
  Using cached debtcollector-1.11.0-py2.py3-none-any.whl (20 kB)
Processing /Users/pradyunsg/Library/Caches/pip/wheels/5f/fd/9e/b6cf5890494cb8ef0b5eaff72e5d55a70fb56316007d6dfe73/wrapt-1.12.1-cp38-cp38-macosx_10_14_x86_64.whl
Collecting requests<3,>=2.2.1
  Using cached requests-2.23.0-py2.py3-none-any.whl (58 kB)
Collecting chardet<4,>=3.0.2
  Using cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)
Collecting idna<3,>=2.5
  Using cached idna-2.9-py2.py3-none-any.whl (58 kB)
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1
  Using cached urllib3-1.25.9-py2.py3-none-any.whl (126 kB)
Collecting certifi>=2017.4.17
  Using cached certifi-2020.4.5.1-py2.py3-none-any.whl (157 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-4.0.0-py3-none-any.whl (310 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.18.0-py2.py3-none-any.whl (310 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.17.2-py2.py3-none-any.whl (309 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.17.1-py2.py3-none-any.whl (309 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.17.0-py2.py3-none-any.whl (309 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.16.0-py2.py3-none-any.whl (305 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.15.0-py2.py3-none-any.whl (304 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.14.0-py2.py3-none-any.whl (302 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.13.2-py2.py3-none-any.whl (302 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.13.1-py2.py3-none-any.whl (302 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.13.0-py2.py3-none-any.whl (302 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.12.0-py2.py3-none-any.whl (299 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.11.2-py2.py3-none-any.whl (299 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.11.1-py2.py3-none-any.whl (298 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.11.0-py2.py3-none-any.whl (290 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.10.1-py2.py3-none-any.whl (297 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.10.0-py2.py3-none-any.whl (289 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.9.0-py2.py3-none-any.whl (289 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.8.0-py2.py3-none-any.whl (288 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.7.0-py2.py3-none-any.whl (288 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.6.2-py2.py3-none-any.whl (287 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.6.1-py2.py3-none-any.whl (287 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.6.0-py2.py3-none-any.whl (287 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.5.0-py2.py3-none-any.whl (282 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.4.1-py2.py3-none-any.whl (289 kB)
Collecting keystoneauth1>=3.4.0
  Using cached keystoneauth1-3.4.0-py2.py3-none-any.whl (282 kB)
Collecting keystoneauth1>=3.3.0
  Using cached keystoneauth1-3.3.0-py2.py3-none-any.whl (279 kB)
Collecting keystoneauth1>=3.1.0
  Using cached keystoneauth1-3.2.0-py2.py3-none-any.whl (274 kB)
Collecting keystoneauth1>=3.1.0
  Using cached keystoneauth1-3.1.1-py2.py3-none-any.whl (277 kB)
Collecting keystoneauth1>=3.1.0
  Using cached keystoneauth1-3.1.0-py2.py3-none-any.whl (271 kB)
Collecting keystoneauth1>=3.0.1
  Using cached keystoneauth1-3.0.1-py2.py3-none-any.whl (270 kB)
Collecting keystoneauth1>=2.21.0
  Using cached keystoneauth1-3.0.0-py2.py3-none-any.whl (270 kB)
Collecting keystoneauth1>=2.21.0
  Using cached keystoneauth1-2.21.0-py2.py3-none-any.whl (247 kB)
Collecting keystoneauth1>=2.20.0
  Using cached keystoneauth1-2.20.0-py2.py3-none-any.whl (247 kB)
Collecting keystoneauth1>=2.18.0
  Using cached keystoneauth1-2.19.0-py2.py3-none-any.whl (244 kB)
Collecting keystoneauth1>=2.18.0
  Using cached keystoneauth1-2.18.0-py2.py3-none-any.whl (241 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-4.0.1-py3-none-any.whl (47 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-4.0.0-py3-none-any.whl (47 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.25.1-py2.py3-none-any.whl (47 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.25.0-py2.py3-none-any.whl (47 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.24.0-py2.py3-none-any.whl (46 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.23.1-py2.py3-none-any.whl (46 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.23.0-py2.py3-none-any.whl (46 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.22.1-py2.py3-none-any.whl (40 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.22.0-py2.py3-none-any.whl (40 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.21.0-py2.py3-none-any.whl (40 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.20.0-py2.py3-none-any.whl (42 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.19.0-py2.py3-none-any.whl (42 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.18.0-py2.py3-none-any.whl (42 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.17.2-py2.py3-none-any.whl (45 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.17.1-py2.py3-none-any.whl (42 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.17.0-py2.py3-none-any.whl (42 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.16.0-py2.py3-none-any.whl (42 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.15.3-py2.py3-none-any.whl (42 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.15.2-py2.py3-none-any.whl (42 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.15.1-py2.py3-none-any.whl (42 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.15.0-py2.py3-none-any.whl (42 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.14.0-py2.py3-none-any.whl (42 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.13.0-py2.py3-none-any.whl (41 kB)
Collecting oslo.i18n>=1.5.0
  Using cached oslo.i18n-3.12.0-py2.py3-none-any.whl (41 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-3.1.1-py3-none-any.whl (28 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-3.1.0-py3-none-any.whl (28 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-3.0.0-py3-none-any.whl (28 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.29.2-py2.py3-none-any.whl (28 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.29.1-py2.py3-none-any.whl (28 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.29.0-py2.py3-none-any.whl (28 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.28.2-py2.py3-none-any.whl (26 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.28.1-py2.py3-none-any.whl (20 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.28.0-py2.py3-none-any.whl (20 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.27.0-py2.py3-none-any.whl (20 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.26.0-py2.py3-none-any.whl (20 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.25.0-py2.py3-none-any.whl (22 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.24.0-py2.py3-none-any.whl (22 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.23.0-py2.py3-none-any.whl (22 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.22.0-py2.py3-none-any.whl (22 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.21.2-py2.py3-none-any.whl (22 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.21.1-py2.py3-none-any.whl (22 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.21.0-py2.py3-none-any.whl (21 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.20.3-py2.py3-none-any.whl (25 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.20.2-py2.py3-none-any.whl (21 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.20.1-py2.py3-none-any.whl (21 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.20.0-py2.py3-none-any.whl (21 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.19.1-py2.py3-none-any.whl (21 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.19.0-py2.py3-none-any.whl (21 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.18.0-py2.py3-none-any.whl (21 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.17.0-py2.py3-none-any.whl (21 kB)
Collecting oslo.serialization>=1.4.0
  Using cached oslo.serialization-2.16.1-py2.py3-none-any.whl (21 kB)
Collecting msgpack-python>=0.4.0
  Using cached msgpack-python-0.5.6.tar.gz (138 kB)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-4.1.1-py3-none-any.whl (100 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-4.1.0-py3-none-any.whl (100 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-4.0.1-py3-none-any.whl (100 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-4.0.0-py2.py3-none-any.whl (100 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.42.1-py2.py3-none-any.whl (100 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.42.0-py2.py3-none-any.whl (99 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.41.5-py2.py3-none-any.whl (100 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.41.4-py2.py3-none-any.whl (100 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.41.3-py2.py3-none-any.whl (99 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.41.2-py2.py3-none-any.whl (99 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.41.1-py2.py3-none-any.whl (99 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.41.0-py2.py3-none-any.whl (99 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.40.6-py2.py3-none-any.whl (100 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.40.5-py2.py3-none-any.whl (99 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.40.4-py2.py3-none-any.whl (99 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.40.3-py2.py3-none-any.whl (99 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.40.2-py2.py3-none-any.whl (99 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.40.1-py2.py3-none-any.whl (99 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.40.0-py2.py3-none-any.whl (99 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.39.1-py2.py3-none-any.whl (98 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.39.0-py2.py3-none-any.whl (98 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.38.0-py2.py3-none-any.whl (98 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.37.1-py2.py3-none-any.whl (98 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.37.0-py2.py3-none-any.whl (92 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.36.5-py2.py3-none-any.whl (98 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.36.4-py2.py3-none-any.whl (91 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.36.3-py2.py3-none-any.whl (91 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.36.2-py2.py3-none-any.whl (91 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.36.1-py2.py3-none-any.whl (91 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.36.0-py2.py3-none-any.whl (92 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.35.1-py2.py3-none-any.whl (90 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.35.0-py2.py3-none-any.whl (91 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.34.0-py2.py3-none-any.whl (91 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.33.0-py2.py3-none-any.whl (90 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.32.0-py2.py3-none-any.whl (89 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.31.0-py2.py3-none-any.whl (89 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.30.0-py2.py3-none-any.whl (89 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.29.0-py2.py3-none-any.whl (89 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.28.4-py2.py3-none-any.whl (102 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.28.3-py2.py3-none-any.whl (95 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.28.2-py2.py3-none-any.whl (97 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.28.1-py2.py3-none-any.whl (97 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.28.0-py2.py3-none-any.whl (97 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.27.0-py2.py3-none-any.whl (97 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.26.0-py2.py3-none-any.whl (97 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.25.1-py2.py3-none-any.whl (97 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.25.0-py2.py3-none-any.whl (97 kB)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.24.0-py2.py3-none-any.whl (97 kB)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.23.0-py2.py3-none-any.whl (97 kB)
Collecting oslo.utils>=2.0.0
  Using cached oslo.utils-3.22.3-py2.py3-none-any.whl (95 kB)
Requirement already satisfied: pyparsing>=2.1.0 in /Users/pradyunsg/.virtualenvs/pip/lib/python3.8/site-packages (from oslo.utils>=2.0.0->python-novaclient==2.27.0->pyrax==1.9.8) (2.4.3)
Collecting netaddr>=0.7.18
  Using cached netaddr-0.7.19-py2.py3-none-any.whl (1.6 MB)
Processing /Users/pradyunsg/Library/Caches/pip/wheels/9b/51/d5/d4682860392414da28ba3c5ffac0243983399b868a9cced6df/netifaces-0.10.9-cp38-cp38-macosx_10_14_x86_64.whl
Collecting monotonic>=0.6
  Using cached monotonic-1.5-py2.py3-none-any.whl (5.3 kB)
Processing /Users/pradyunsg/Library/Caches/pip/wheels/79/a1/9f/a28ec96c5663fca58b4c735c54b202b4ae08fc4f7624bddb06/simplejson-3.17.0-cp38-cp38-macosx_10_14_x86_64.whl
Collecting oslo.config>=5.2.0
  Using cached oslo.config-8.0.2-py3-none-any.whl (125 kB)
Collecting rfc3986>=1.2.0
  Using cached rfc3986-1.4.0-py2.py3-none-any.whl (31 kB)
Processing /Users/pradyunsg/Library/Caches/pip/wheels/13/90/db/290ab3a34f2ef0b5a0f89235dc2d40fea83e77de84ed2dc05c/PyYAML-5.3.1-cp38-cp38-macosx_10_14_x86_64.whl
Collecting PyYAML>=3.12
  Using cached PyYAML-5.3.tar.gz (268 kB)
Collecting PyYAML>=3.12
ERROR: pip can't proceed with requirements 'PyYAML>=3.12 from https://files.pythonhosted.org/packages/8d/c9/e5be955a117a1ac548cdd31e37e8fd7b02ce987f9655f5c7563c656d5dcb/PyYAML-5.2.tar.gz#sha256=c0ee8eca2c582d29c3c2ec6e2c4f703d1b7f1fb10bc72317355a746057e7346c (from oslo.serialization>=1.4.0->python-novaclient==2.27.0->pyrax==1.9.8)' due to a pre-existing build directory (/private/var/folders/4d/bt0_xfx56bjfmmt2bv3r5_qh0000gn/T/pip-install-bd2tvyfz/PyYAML). This is likely due to a previous installation that failed. pip is being responsible and not assuming it can delete this. Please delete it and try again.

new resolver UX UX - functionality research epic needs discussion

Most helpful comment

The progress bar, IMHO, is pretty much similar to the transparent washing machine lid, while it might be useful to track the progress, for many it's even more important because it makes the waiting time more enjoyable.

I love this comment :-)

Similar behavior to what we have right now, but the bar stay in one place (i.e. 0% → 100% → 0% → ...), or

This is the option I had in mind.

All 18 comments

Note that the failure at the end is something that'll be fixed by #8283; but the point of this discussion is all the output prior to it. https://github.com/pypa/pip/issues/8294 is a well formed report of it.

Some thoughts:

  • Do we need "Collecting xxx/Using xxx" at all?
  • Can we have a single progress bar line that gets re-used for each download in turn?
  • Knowing which packages we used wheels for and which needed to be built from source is (occasionally) useful to me, that's the only thing I typically get from the "Collecting" lines.
  • We get the versions of what finally gets installed in the "Installing" line later.

Can we have a single progress bar line that gets re-used for each download in turn?

I wonder what you mean by this, is it

  • Similar behavior to what we have right now, but the bar stay in one place (i.e. 0% → 100% → 0% → ...), or
  • A global progress bar tracking all packages to be downloaded. I imagine that the progress would not only go up but also go down so I think it is not the case.

The progress bar, IMHO, is pretty much similar to the transparent washing machine lid, while it might be useful to track the progress, for many it's even more important because it makes the waiting time more enjoyable.

Knowing which packages we used wheels for and which needed to be built from source is (occasionally) useful to me

I'd like to have this too, and this was mentioned in https://github.com/pypa/pip/issues/7815#issuecomment-605455983 as needing refactoring I think.

A global progress bar tracking all packages to be downloaded. I imagine that the progress would not only go up but also go down so I think it is not the case.

This would definitely not be what we do. :)

The progress bar, IMHO, is pretty much similar to the transparent washing machine lid, while it might be useful to track the progress, for many it's even more important because it makes the waiting time more enjoyable.

I love this comment :-)

Similar behavior to what we have right now, but the bar stay in one place (i.e. 0% → 100% → 0% → ...), or

This is the option I had in mind.

@pfmoore, if we do that and not using curses or the alike, can the user tell what's been downloaded and what's not, since we'll be limited to one single line I think. Additionally, I believe that it is not possible to fit both the filename and the progress bar within an average console line. Although I'm not entirely sure if it is a good idea to print entire wheel filenames, which are especially long and contain more than enough information (e.g. do I as an user need to care if it's manylinux1 or manylinux2014?).

@pradyunsg, is it correct that the expected behavior is at most (in case the more compact output discussed above turns out to be not so doable) something like

Collecting foo<42
  Using cached foo-41...
  Using cached foo-40...
  Downloading foo-40...
    <progress bar>
  Downloading foo-40...
    ...

I also wonder if it is intuitive (to new users) that resolution is happening behind the scene and that the candidates are being rejected that the next one is being downloaded, since the mocked up output above looks kind of strange.

I also wonder if it is intuitive (to new users) that resolution is happening behind the scene and that the candidates are being rejected that the next one is being downloaded, since the mocked up output above looks kind of strange.

Agreed, that's why I sort of wonder whether any of this output is worthwhile. But I'm mostly just speculating on what others might like, to be honest. It matters very little to me personally.

I suggest we "look outward" at Rust/npm/brew/poetry etc, to figure out what they show during dependency resolution.

is it correct that the expected behavior is at most

I have no idea what a good answer is. If everyone left it to me, I'd just orient the entire output around the resolver's state, and completely redo pip's output while I'm at it. :)

Resolving dependencies...
  adding: pyrax==1.9.8
  working on: pyrax==1.9.8
    fetching: pyrax-1.9.8-py2.py3-none-any.whl
      [download bar, that gets replaced by the next line after download]
    fetched: pyrax-1.9.8-py2.py3-none-any.whl (346 kB, downloaded in 12 seconds)
  selected: pyrax 1.9.8
  adding: six (>=1.5.2)
  adding: python-novaclient (>=2.13.0)
  adding: mock
  adding: requests (>=2.2.1)
  adding: keyring
  adding: python-swiftclient (>=1.5.0)
  adding: rackspace-novaclient

  working on: six (>=1.5.2)
    already installed: six 1.14.0
  selected: six 1.14.0

  working on: python-novaclient (>=2.13.0)
    fetching: python_novaclient-2.27.0-py2.py3-none-any.whl
    fetched: python_novaclient-2.27.0-py2.py3-none-any.whl (312 kB, cached)
  selected: python-novaclient 2.27.0

  adding: pbr (>=2.0.0,<2.1.0)
  adding: keystoneauth1 (>=3.5.0)
  adding: iso8601 (>=0.1.11)
  adding: oslo.i18n (>=3.15.3)
  adding: oslo.serialization (>=2.18.0,<2.19.1)
  adding: oslo.utils (>=3.33.0)
  adding: PrettyTable (>=0.7.2,<0.8)
  adding: simplejson (>=3.5.1)
  adding: six (>=1.10.0)
  adding: Babel (>=2.3.4,<2.4.0)

  [snip]

  working on: PyYAML (>=3.12)
    fetching: PyYAML-5.3.1.tar.gz (NNN kB, cached)
    generating metadata... failed!
    rejecting: PyYAML 5.3.1 (due to failure to generate metadata)
    fetching: PyYAML-5.3.tar.gz (NNN kB, cached)
    generating metadata... failed!
    rejecting: PyYAML 5.3  (due to failure to generate metadata)
    fetching: PyYAML-5.2.tar.gz (NNN kB, cached)
    generating metadata... done!
  selected: PyYAML 5.3

  [snip]

This is semi-inspired by poetry's -vv output.

What does Poetry’s output look like on backtracking? That’s the thing generating output for us right now, and the above example does not have that.

   1: fact: urllib3 (1.25.9) requires Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4
   1: derived: not urllib3 (1.25.9)
   1: fact: urllib3 (1.25.8) requires Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4
   1: derived: not urllib3 (1.25.8)
   1: fact: urllib3 (1.25.7) requires Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4
   1: derived: not urllib3 (1.25.7)
   1: fact: urllib3 (1.25.6) requires Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4
   1: derived: not urllib3 (1.25.6)
   1: fact: urllib3 (1.25.5) requires Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4
   1: derived: not urllib3 (1.25.5)
   1: fact: urllib3 (1.25.4) requires Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4
   1: derived: not urllib3 (1.25.4)
   1: fact: urllib3 (1.25.3) requires Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4
   1: derived: not urllib3 (1.25.3)
   1: fact: urllib3 (1.25.2) requires Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4
   1: derived: not urllib3 (1.25.2)
   1: fact: urllib3 (1.24.3) requires Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4
   1: derived: not urllib3 (1.24.3)
   1: fact: urllib3 (1.24.2) requires Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4
   1: derived: not urllib3 (1.24.2)
   1: fact: urllib3 (1.24.1) requires Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4
   1: derived: not urllib3 (1.24.1)
   1: fact: urllib3 (1.24) requires Python >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4
   1: derived: not urllib3 (1.24)
   1: fact: urllib3 (1.23) requires Python >=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4
   1: derived: not urllib3 (1.23)

I wouldn’t say that’s meaningfully different than pip’s current behaviour 🙁

To be clear, poetry's default output is... to not show anything except a timer. :)

Coming from https://github.com/pypa/pip/pull/8467#issuecomment-648717032, if the dependency information is retrieved differently, do we still want to print e.g. Collecting spam 1.0 (I suggest going for the concrete version)? As an user, what I really want here is to have another logging level, where it is not as cluttered as -v and print extra and occasionally useful (e.g. in case the resolution takes too long) information like this and by default replace the entire thing by Resolving dependencies.

@pradyunsg @uranusjr @pfmoore - have you made a decision on this? Do you need UX to make a recommendation/specification here?

I think our decision here (through inaction, time constraints, etc) is to leave the status-quo behavior for now.

Recommendations and inputs would certainly be welcome. This is closely related to #8453 (arguably, a single case whereas #8453 is the general "umbrella" that covers this), so I imagine we'd likely tackle this as part of working on that.

8861 contains the dumbest implementation idea I had for reducing the "Collecting ..." lines we print:

Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-4.1.0-py3-none-any.whl (390 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-4.0.0-py3-none-any.whl (397 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.22.0-py2.py3-none-any.whl (397 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.21.0-py2.py3-none-any.whl (395 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.20.0-py2.py3-none-any.whl (394 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.19.1-py2.py3-none-any.whl (394 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.19.0-py2.py3-none-any.whl (394 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.18.0-py2.py3-none-any.whl (393 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.17.0-py2.py3-none-any.whl (382 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.16.0-py2.py3-none-any.whl (376 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.15.1-py2.py3-none-any.whl (385 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.15.0-py2.py3-none-any.whl (378 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.14.0-py2.py3-none-any.whl (372 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.13.1-py2.py3-none-any.whl (381 kB)
Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-3.13.0-py2.py3-none-any.whl (374 kB)

Becomes:

Collecting python-keystoneclient>=1.6.0
  Using cached python_keystoneclient-4.1.0-py3-none-any.whl (390 kB)
  Using cached python_keystoneclient-4.0.0-py3-none-any.whl (397 kB)
  Using cached python_keystoneclient-3.22.0-py2.py3-none-any.whl (397 kB)
  Using cached python_keystoneclient-3.21.0-py2.py3-none-any.whl (395 kB)
  Using cached python_keystoneclient-3.20.0-py2.py3-none-any.whl (394 kB)
  Using cached python_keystoneclient-3.19.1-py2.py3-none-any.whl (394 kB)
  Using cached python_keystoneclient-3.19.0-py2.py3-none-any.whl (394 kB)
  Using cached python_keystoneclient-3.18.0-py2.py3-none-any.whl (393 kB)
  Using cached python_keystoneclient-3.17.0-py2.py3-none-any.whl (382 kB)
  Using cached python_keystoneclient-3.16.0-py2.py3-none-any.whl (376 kB)
  Using cached python_keystoneclient-3.15.1-py2.py3-none-any.whl (385 kB)
  Using cached python_keystoneclient-3.15.0-py2.py3-none-any.whl (378 kB)
  Using cached python_keystoneclient-3.14.0-py2.py3-none-any.whl (372 kB)
  Using cached python_keystoneclient-3.13.1-py2.py3-none-any.whl (381 kB)
  Using cached python_keystoneclient-3.13.0-py2.py3-none-any.whl (374 kB)

I think that's an improvement, but we might want to do a bunch more here. :)

As I mentioned in https://github.com/pypa/pip/issues/8683#issuecomment-704615409 :

The team discussed this problem in last week's meeting and work is now in progress so that pip will inform the user when the resolver is doing a lot of backtracking. We'll probably be giving the user a short in-terminal error message and pointing to longer documentation, as we did with this conflict resolution documentation.

I think I'm happy with where we are with pip 20.3 beta1. Let's close this.

Was this page helpful?
0 / 5 - 0 ratings