Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improving new resolver output when backtracking choices #8346

Closed
pradyunsg opened this issue May 28, 2020 · 18 comments
Closed

Improving new resolver output when backtracking choices #8346

pradyunsg opened this issue May 28, 2020 · 18 comments
Assignees
Labels
state: needs discussion This needs some more discussion UX: functionality research epic Temporary label to link tickets to #8516 UX User experience related

Comments

@pradyunsg
Copy link
Member

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.
@pradyunsg pradyunsg added state: needs discussion This needs some more discussion UX User experience related C: new resolver labels May 28, 2020
@pradyunsg
Copy link
Member Author

pradyunsg commented May 28, 2020

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. #8294 is a well formed report of it.

@pfmoore
Copy link
Member

pfmoore commented May 28, 2020

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.

@McSinyx
Copy link
Contributor

McSinyx commented May 28, 2020

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 #7815 (comment) as needing refactoring I think.

@pradyunsg
Copy link
Member Author

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. :)

@pfmoore
Copy link
Member

pfmoore commented May 28, 2020

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.

@McSinyx
Copy link
Contributor

McSinyx commented May 28, 2020

@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.

@pfmoore
Copy link
Member

pfmoore commented May 28, 2020

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.

@pradyunsg
Copy link
Member Author

pradyunsg commented May 28, 2020

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.

@uranusjr
Copy link
Member

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.

@pradyunsg
Copy link
Member Author

   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)

@uranusjr
Copy link
Member

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

@pradyunsg
Copy link
Member Author

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

@McSinyx
Copy link
Contributor

McSinyx commented Jun 24, 2020

Coming from #8467 (comment), 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.

@nlhkabu
Copy link
Member

nlhkabu commented Jun 30, 2020

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

@pradyunsg
Copy link
Member Author

pradyunsg commented Jun 30, 2020

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.

@nlhkabu nlhkabu added the UX: functionality research epic Temporary label to link tickets to #8516 label Jul 28, 2020
@pradyunsg pradyunsg changed the title Output contains lots of duplicated "Collecting XYZ" messages, when making a different choice for a certain version of a package Improving new resolver output when backtracking choices Aug 3, 2020
@pradyunsg pradyunsg self-assigned this Sep 2, 2020
@pradyunsg
Copy link
Member Author

#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. :)

@brainwane
Copy link
Contributor

As I mentioned in #8683 (comment) :

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.

@pradyunsg
Copy link
Member Author

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

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Oct 7, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
state: needs discussion This needs some more discussion UX: functionality research epic Temporary label to link tickets to #8516 UX User experience related
Projects
None yet
Development

No branches or pull requests

6 participants