question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

New resolver: Build automated testing to check for acceptable performance

See original GitHub issue

Our new dependency resolver may make pip a bit slower than it used to be.

Therefore I believe we need to pull together some extremely rough speed tests and decide what level of speed is acceptable, then build some automated testing to check whether we are meeting those marks.

I just ran a few local tests (on a not-particularly-souped-up laptop) to do a side-by-side comparison:

$ time pip install --upgrade pip
Requirement already up-to-date: pip in [path]/python3.7/site-packages (20.2)

real	0m0.867s
user	0m0.680s
sys	0m0.076s

$ time pip install --upgrade pip --use-feature=2020-resolver
Requirement already satisfied: pip in [path]/python3.7/site-packages (20.2)

real	0m1.243s
user	0m0.897s
sys	0m0.060s

Or, in 2 different virtualenvs:

$ time pip install --upgrade chardet
Requirement already up-to-date: chardet in [path].virtualenvs/form990/lib/python3.7/site-packages (3.0.4)

real	0m0.616s
user	0m0.412s
sys	0m0.053s

$ time pip install --upgrade chardet --use-feature=2020-resolver
Requirement already satisfied: chardet in [path].virtualenvs/ical3/lib/python3.7/site-packages (3.0.4)

real	0m1.137s
user	0m0.404s
sys	0m0.053s

These numbers will add up with more complicated processes, dealing with lots of packages at a time.

Related to #6536 and #988.


Edit by @brainwane: As of November 2020 we have defined some speed goals and the new resolver has acceptable performance, so I’ve switched this issue to be about building automated testing to ensure that we continue to meet our goals in the future.


Edit by @uranusjr: Some explanation for people landing here. The new resolver is generally slower because it checks the dependency between packages more rigorously, and tries to find alternative solutions when dependency specifications do not meet. The legacy resolver, on the other hand, just picks the one specification it likes best without verifying, which of course is faster but also irresponsible.

Feel free to post examples here if the new resolver runs slowly for your project. We are very interested in reviewing all of them to identify possible improvements. When doing so, however, please make sure to also include the pip install output, not just your requirements.txt. The output is important for us to identify what pip is spending time for, and suggest workarounds if possible.

Issue Analytics

  • State:open
  • Created 3 years ago
  • Reactions:5
  • Comments:51 (28 by maintainers)

github_iconTop GitHub Comments

7reactions
pradyunsgcommented, Oct 1, 2020

Thanks to @pfmoore and @uranusjr’s amazingness, we have #8912 and #8932 which should significantly improve optimize how often we hit the network.


we need to pull together some extremely rough speed tests

I took wayyy too long to finish doing this, but… here are numbers for a few runs, comparing the legacy resolver vs the 2020 resolver in 20.2.3 vs after-#8932. All the requirements used for these tests are from reports we’ve seen from our users (yay feedback!) and are included below.

In the listing below, “cold” is a pip install -r ... run in a clean virtualenv. “warm” is a pip install -r ... run in an already populated virtualenv (basically the state after the “cold” run). All runs are after populating the cache with all the relevant files, to reduce the overhead of downloading the distribution files.

one.txt (legacy resolver, cold)        : 0m 28.09s
one.txt (new resolver, 20.2.3, cold)   : 1m  8.89s
one.txt (new resolver, #8932, cold)    : 1m 23.61s

one.txt (legacy resolver, warm)        : 0m  0.93s
one.txt (new resolver, 20.2.3, warm)   : 0m 52.86s
one.txt (new resolver, #8932, warm)    : 0m  1.23s

two.txt (legacy resolver, cold)        : 0m 56.02s
two.txt (new resolver, 20.2.3, cold)   : 1m 31.32s
two.txt (new resolver, #8932, cold)    : 2m  7.57s

two.txt (legacy resolver, warm)        : 0m  1.96s
two.txt (new resolver, 20.2.3, warm)   : 0m 57.29s
two.txt (new resolver, #8932, warm)    : 0m  2.99s

three.txt (legacy resolver, cold)      : 0m 18.94s
three.txt (new resolver, 20.2.3, cold) : 0m 29.00s
three.txt (new resolver, #8932, cold)  : 0m 28.29s

three.txt (legacy resolver, warm)      : 0m  0.61s
three.txt (new resolver, 20.2.3, warm) : 0m 13.63s
three.txt (new resolver, #8932, warm)  : 0m  0.81s

It’s relatively straightforward to pull together more numbers here, but I think these paint a fairly reasonable “broad strokes” picture. Let me know if someone thinks we need more information here. 😃

With #8932, things improve substantially for “warm” states, with a minor degradation in some situations for the “cold” case. Looking at the way the resolver is exploring the graph, I think we’re doing OK. The part of this change that we had most feedback on – the “warm” case – should be fixed pretty soon. It’s worth investigating why #8932 makes the “cold” cases slower though.

decide what level of speed is acceptable

Once #8932 is merged, I think we’ll be at an acceptable point.

We are expecting some amount of degradation due to actually being strict, and looking at what the resolver is doing that seems to be the case here, so I think we’re fine. FWIW, running with --no-deps isn’t going to result in any speedups (since we’re still verifying the choices made).

Beyond that, the only think that may be worth exploring is why #8932 right now isn’t as fast as the 20.2.3 resolver in the cold case. I’ll also point out that #8932 is open right now, so it’s likely @uranusjr or I or @pfmoore would look into this before that merges. I don’t think it’s a big enough deviation to block the release but I’m all ears for differing opinions. 😃

The input files, scripts and intermediate-output involved

Manually formatted text, w/ a text editor and a throw-away script:

> virtualenv /tmp/one.txt.venv --quiet --clear
  started   : 17:37:57.5497
  ended     : 17:37:58.0608
  time taken: 0m  0.51s
> /tmp/one.txt.venv/bin/pip install -r one.txt
  started   : 17:37:58.0608
  ended     : 17:38:26.1556
  time taken: 0m 28.09s
> /tmp/one.txt.venv/bin/pip install -r one.txt
  started   : 17:38:26.1556
  ended     : 17:38:27.0868
  time taken: 0m  0.93s

> virtualenv /tmp/one.txt.venv --quiet --clear
  started   : 17:38:27.0868
  ended     : 17:38:29.4514
  time taken: 0m  2.36s
> /tmp/one.txt.venv/bin/pip install -r one.txt --use-feature=2020-resolver
  started   : 17:38:29.4514
  ended     : 17:39:38.3507
  time taken: 1m  8.89s
> /tmp/one.txt.venv/bin/pip install -r one.txt --use-feature=2020-resolver
  started   : 17:39:38.3507
  ended     : 17:40:31.2113
  time taken: 0m 52.86s

> virtualenv /tmp/one.txt.venv --quiet --clear
  started   : 17:40:31.2113
  ended     : 17:40:33.6294
  time taken: 0m  2.41s
> /tmp/one.txt.venv/bin/pip install https://github.com/uranusjr/pip/archive/new-resolver-lazy-sequence.zip
  started   : 17:40:33.6294
  ended     : 17:40:48.2973
  time taken: 0m 14.66s
> /tmp/one.txt.venv/bin/pip install -r one.txt --use-feature=2020-resolver
  started   : 17:40:48.2973
  ended     : 17:42:11.9149
  time taken: 1m 23.61s
> /tmp/one.txt.venv/bin/pip install -r one.txt --use-feature=2020-resolver
  started   : 17:42:11.9149
  ended     : 17:42:13.1487
  time taken: 0m  1.23s

> virtualenv /tmp/three.txt.venv --quiet --clear
  started   : 17:42:13.1487
  ended     : 17:42:14.5905
  time taken: 0m  1.44s
> /tmp/three.txt.venv/bin/pip install -r three.txt
  started   : 17:42:14.5905
  ended     : 17:42:33.5365
  time taken: 0m 18.94s
> /tmp/three.txt.venv/bin/pip install -r three.txt
  started   : 17:42:33.5365
  ended     : 17:42:34.1531
  time taken: 0m  0.61s

> virtualenv /tmp/three.txt.venv --quiet --clear
  started   : 17:42:34.1531
  ended     : 17:42:35.3589
  time taken: 0m  1.20s
> /tmp/three.txt.venv/bin/pip install -r three.txt --use-feature=2020-resolver
  started   : 17:42:35.3589
  ended     : 17:43:04.3643
  time taken: 0m 29.00s
> /tmp/three.txt.venv/bin/pip install -r three.txt --use-feature=2020-resolver
  started   : 17:43:04.3643
  ended     : 17:43:17.9963
  time taken: 0m 13.63s

> virtualenv /tmp/three.txt.venv --quiet --clear
  started   : 17:43:17.9963
  ended     : 17:43:19.5427
  time taken: 0m  1.54s
> /tmp/three.txt.venv/bin/pip install https://github.com/uranusjr/pip/archive/new-resolver-lazy-sequence.zip
  started   : 17:43:19.5427
  ended     : 17:43:28.5639
  time taken: 0m  9.02s
> /tmp/three.txt.venv/bin/pip install -r three.txt --use-feature=2020-resolver
  started   : 17:43:28.5639
  ended     : 17:43:56.8558
  time taken: 0m 28.29s
> /tmp/three.txt.venv/bin/pip install -r three.txt --use-feature=2020-resolver
  started   : 17:43:56.8558
  ended     : 17:43:57.6750
  time taken: 0m  0.81s

> virtualenv /tmp/two.txt.venv --quiet --clear
  started   : 17:43:57.6750
  ended     : 17:44:02.2569
  time taken: 0m  4.58s
> /tmp/two.txt.venv/bin/pip install -r two.txt
  started   : 17:44:02.2569
  ended     : 17:44:58.2840
  time taken: 0m 56.02s
> /tmp/two.txt.venv/bin/pip install -r two.txt
  started   : 17:44:58.2840
  ended     : 17:45:00.2502
  time taken: 0m  1.96s

> virtualenv /tmp/two.txt.venv --quiet --clear
  started   : 17:45:00.2502
  ended     : 17:45:03.9982
  time taken: 0m  3.74s
> /tmp/two.txt.venv/bin/pip install -r two.txt --use-feature=2020-resolver
  started   : 17:45:03.9982
  ended     : 17:46:35.3267
  time taken: 1m 31.32s
> /tmp/two.txt.venv/bin/pip install -r two.txt --use-feature=2020-resolver
  started   : 17:46:35.3267
  ended     : 17:47:32.6175
  time taken: 0m 57.29s

> virtualenv /tmp/two.txt.venv --quiet --clear
  started   : 17:47:32.6175
  ended     : 17:47:36.0087
  time taken: 0m  3.39s
> /tmp/two.txt.venv/bin/pip install https://github.com/uranusjr/pip/archive/new-resolver-lazy-sequence.zip
  started   : 17:47:36.0087
  ended     : 17:47:44.1832
  time taken: 0m  8.17s
> /tmp/two.txt.venv/bin/pip install -r two.txt --use-feature=2020-resolver
  started   : 17:47:44.1832
  ended     : 17:49:51.7550
  time taken: 2m  7.57s
> /tmp/two.txt.venv/bin/pip install -r two.txt --use-feature=2020-resolver
  started   : 17:49:51.7550
  ended     : 17:49:54.7549
  time taken: 0m  2.99s
$ bash ./run.sh
[...]
$ cat ./state.dump
(17:37:57.5497) > virtualenv /tmp/one.txt.venv --quiet --clear
(17:37:58.0608) > /tmp/one.txt.venv/bin/pip install -r one.txt
(17:38:26.1556) > /tmp/one.txt.venv/bin/pip install -r one.txt
(17:38:27.0868) > virtualenv /tmp/one.txt.venv --quiet --clear
(17:38:29.4514) > /tmp/one.txt.venv/bin/pip install -r one.txt --use-feature=2020-resolver
(17:39:38.3507) > /tmp/one.txt.venv/bin/pip install -r one.txt --use-feature=2020-resolver
(17:40:31.2113) > virtualenv /tmp/one.txt.venv --quiet --clear
(17:40:33.6294) > /tmp/one.txt.venv/bin/pip install https://github.com/uranusjr/pip/archive/new-resolver-lazy-sequence.zip
(17:40:48.2973) > /tmp/one.txt.venv/bin/pip install -r one.txt --use-feature=2020-resolver
(17:42:11.9149) > /tmp/one.txt.venv/bin/pip install -r one.txt --use-feature=2020-resolver
(17:42:13.1487) > virtualenv /tmp/three.txt.venv --quiet --clear
(17:42:14.5905) > /tmp/three.txt.venv/bin/pip install -r three.txt
(17:42:33.5365) > /tmp/three.txt.venv/bin/pip install -r three.txt
(17:42:34.1531) > virtualenv /tmp/three.txt.venv --quiet --clear
(17:42:35.3589) > /tmp/three.txt.venv/bin/pip install -r three.txt --use-feature=2020-resolver
(17:43:04.3643) > /tmp/three.txt.venv/bin/pip install -r three.txt --use-feature=2020-resolver
(17:43:17.9963) > virtualenv /tmp/three.txt.venv --quiet --clear
(17:43:19.5427) > /tmp/three.txt.venv/bin/pip install https://github.com/uranusjr/pip/archive/new-resolver-lazy-sequence.zip
(17:43:28.5639) > /tmp/three.txt.venv/bin/pip install -r three.txt --use-feature=2020-resolver
(17:43:56.8558) > /tmp/three.txt.venv/bin/pip install -r three.txt --use-feature=2020-resolver
(17:43:57.6750) > virtualenv /tmp/two.txt.venv --quiet --clear
(17:44:02.2569) > /tmp/two.txt.venv/bin/pip install -r two.txt
(17:44:58.2840) > /tmp/two.txt.venv/bin/pip install -r two.txt
(17:45:00.2502) > virtualenv /tmp/two.txt.venv --quiet --clear
(17:45:03.9982) > /tmp/two.txt.venv/bin/pip install -r two.txt --use-feature=2020-resolver
(17:46:35.3267) > /tmp/two.txt.venv/bin/pip install -r two.txt --use-feature=2020-resolver
(17:47:32.6175) > virtualenv /tmp/two.txt.venv --quiet --clear
(17:47:36.0087) > /tmp/two.txt.venv/bin/pip install https://github.com/uranusjr/pip/archive/new-resolver-lazy-sequence.zip
(17:47:44.1832) > /tmp/two.txt.venv/bin/pip install -r two.txt --use-feature=2020-resolver
(17:49:51.7550) > /tmp/two.txt.venv/bin/pip install -r two.txt --use-feature=2020-resolver
(17:49:54.7549) > echo Done.

run.sh:

function run_pip() {
  run /tmp/$1.venv/bin/pip install -r $@
  run /tmp/$1.venv/bin/pip install -r $@
}

function run() {
  time=$(gdate "+%H:%M:%S.%4N")
  echo "($time) > $@" >> state.dump
  echo -ne "\033[34m($time) $ "
  echo -ne $@
  echo -e "\033[0m"
  $@
}

for file in $(ls *.txt)
do
  run virtualenv /tmp/$file.venv --quiet --clear
  run_pip $file

  run virtualenv /tmp/$file.venv --quiet --clear
  run_pip $file --use-feature=2020-resolver

  run virtualenv /tmp/$file.venv --quiet --clear
  run /tmp/$file.venv/bin/pip install https://github.com/uranusjr/pip/archive/new-resolver-lazy-sequence.zip
  run_pip $file --use-feature=2020-resolver
done

run echo "Done."

one.txt:

Django==3.0.9
django-auth-ldap
django-cors-headers
django-debug-toolbar
django-extensions
django-uwsgi
django-haystack==3.0b2
hyperkitty==1.3.3
mailman
mailman-hyperkitty
postorius
psycopg2-binary==2.8.5
supervisor
uWSGI==2.0.19.1
whoosh

two.txt:

#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile
#
aiohttp==3.6.2            # via slackclient
aioredis==1.3.1           # via channels-redis
appdirs==1.4.4            # via black, virtualenv, zeep
appnope==0.1.0            # via ipython
apscheduler==3.6.3        # via -r requirements.in
asgiref==3.2.10           # via -r requirements.in, channels, channels-redis, daphne, django
async-timeout==3.0.1      # via aiohttp, aioredis
attrs==20.2.0             # via aiohttp, automat, curlylint, flake8-bugbear, jsonschema, service-identity, twisted, zeep
autobahn==20.7.1          # via daphne
automat==20.2.0           # via twisted
backcall==0.2.0           # via ipython
beautifulsoup4==4.9.1     # via webtest
black==20.8b1             # via -r requirements.in
boto3==1.15.3             # via -r requirements.in
botocore==1.18.3          # via boto3, s3transfer
cached-property==1.5.2    # via zeep
certifi==2020.6.20        # via requests, sentry-sdk
cffi==1.14.3              # via cryptography
cfgv==3.2.0               # via pre-commit
channels-redis==3.1.0     # via -r requirements.in
channels==2.4.0           # via -r requirements.in, channels-redis
chardet==3.0.4            # via aiohttp, requests
click==7.1.2              # via black, curlylint, pip-tools, safety
constantly==15.1.0        # via twisted
coverage==5.3             # via -r requirements.in
cryptography==3.1.1       # via autobahn, pyopenssl, service-identity
curlylint==0.12.0         # via -r requirements.in
daphne==2.5.0             # via -r requirements.in, channels
decorator==4.4.2          # via ipython
defusedxml==0.6.0         # via odfpy, zeep
diff-match-patch==20200713  # via django-import-export
distlib==0.3.1            # via virtualenv
dj-rest-auth==1.1.1       # via -r requirements.in
django-capture-on-commit-callbacks==1.2.0  # via -r requirements.in
django-debug-toolbar==3.1  # via -r requirements.in
django-extensions==3.0.9  # via -r requirements.in
django-import-export==2.3.0  # via -r requirements.in
django-ipware==3.0.1      # via -r requirements.in
django-money==1.1         # via -r requirements.in
django-oauth-toolkit==1.3.2  # via -r requirements.in
django-post-office==3.4.1  # via -r requirements.in
django-storages==1.10.1   # via -r requirements.in
django-webtest==1.9.7     # via -r requirements.in
django==3.0.10            # via -r requirements.in, channels, dj-rest-auth, django-capture-on-commit-callbacks, django-debug-toolbar, django-import-export, django-money, django-oauth-toolkit, django-post-office, django-storages, djangorestframework, jsonfield
djangorestframework==3.11.1  # via -r requirements.in, dj-rest-auth
dparse==0.5.1             # via safety
et-xmlfile==1.0.1         # via openpyxl
filelock==3.0.12          # via virtualenv
flake8-bugbear==20.1.4    # via -r requirements.in
flake8-comprehensions==3.2.3  # via -r requirements.in
flake8-tidy-imports==4.1.0  # via -r requirements.in
flake8==3.8.3             # via -r requirements.in, flake8-bugbear, flake8-comprehensions, flake8-tidy-imports
gql==2.0.0                # via -r requirements.in
graphql-core==2.3.2       # via gql
gunicorn==20.0.4          # via -r requirements.in
haversine==2.3.0          # via -r requirements.in
hiredis==1.1.0            # via aioredis
html5lib==1.1             # via -r requirements.in
huey==2.3.0               # via -r requirements.in
hyperlink==20.0.1         # via twisted
identify==1.5.4           # via pre-commit
idna==2.10                # via hyperlink, requests, twisted, yarl
incremental==17.5.0       # via twisted
ipython-genutils==0.2.0   # via traitlets
ipython==7.18.1           # via -r requirements.in
isodate==0.6.0            # via zeep
isort==5.5.3              # via -r requirements.in
jdcal==1.4.1              # via openpyxl
jedi==0.17.2              # via ipython
jmespath==0.10.0          # via boto3, botocore
jsonfield==3.1.0          # via django-post-office
jsonschema==3.2.0         # via ocpp
lxml==4.5.2               # via -r requirements.in, zeep
markuppy==1.14            # via tablib
mccabe==0.6.1             # via flake8
msgpack==1.0.0            # via channels-redis
multidict==4.7.6          # via aiohttp, yarl
mypy-extensions==0.4.3    # via black, mypy
mypy==0.782               # via -r requirements.in
nodeenv==1.5.0            # via pre-commit
numpy==1.18.5             # via -r requirements.in, pandas, scipy
oauthlib==3.1.0           # via django-oauth-toolkit, requests-oauthlib
ocpp==0.7.1               # via -r requirements.in
odfpy==1.4.1              # via tablib
openpyxl==3.0.5           # via tablib
packaging==20.4           # via dparse, safety
pandas==1.1.2             # via -r requirements.in
parameterized==0.7.4      # via -r requirements.in
parso==0.7.1              # via jedi
parsy==1.1.0              # via curlylint
pathspec==0.8.0           # via black, curlylint
pexpect==4.8.0            # via ipython
pickleshare==0.7.5        # via ipython
pillow==7.2.0             # via -r requirements.in
pip-lock==2.1.1           # via -r requirements.in
pip-tools==5.3.1          # via -r requirements.in
postcode.io==0.1.1        # via -r requirements.in
pre-commit==2.7.1         # via -r requirements.in
promise==2.3              # via gql, graphql-core
prompt-toolkit==3.0.7     # via ipython
psutil==5.7.2             # via -r requirements.in
psycopg2-binary==2.8.6    # via -r requirements.in
ptyprocess==0.6.0         # via pexpect
py-moneyed==0.8.0         # via django-money
pyasn1-modules==0.2.8     # via service-identity
pyasn1==0.4.8             # via pyasn1-modules, service-identity
pycodestyle==2.6.0        # via flake8
pycparser==2.20           # via cffi
pyflakes==2.2.0           # via flake8
pygments==2.7.1           # via ipython
pyhamcrest==2.0.2         # via twisted
pyopenssl==19.1.0         # via twisted
pyparsing==2.4.7          # via packaging
pyrsistent==0.17.3        # via jsonschema
python-dateutil==2.8.1    # via -r requirements.in, botocore, pandas, smartcar, time-machine
pytz==2020.1              # via apscheduler, django, pandas, tzlocal, zeep
pyyaml==5.3.1             # via dparse, pre-commit, tablib
redis==3.5.3              # via -r requirements.in
regex==2020.7.14          # via black
requests-mock==1.8.0      # via -r requirements.in
requests-oauthlib==1.3.0  # via -r requirements.in
requests-toolbelt==0.9.1  # via zeep
requests==2.24.0          # via -r requirements.in, django-oauth-toolkit, gql, postcode.io, requests-mock, requests-oauthlib, requests-toolbelt, safety, smartcar, zeep
rx==1.6.1                 # via graphql-core
s3transfer==0.3.3         # via boto3
safety==1.9.0             # via -r requirements.in
scipy==1.5.2              # via -r requirements.in
scraperapi-sdk==0.2.2     # via -r requirements.in
sentry-sdk==0.17.7        # via -r requirements.in
service-identity==18.1.0  # via twisted
setproctitle==1.1.10      # via -r requirements.in
simplejson==3.17.2        # via -r requirements.in
six==1.15.0               # via apscheduler, automat, cryptography, gql, graphql-core, html5lib, isodate, jsonschema, packaging, pip-tools, promise, pyopenssl, python-dateutil, requests-mock, virtualenv, webtest, zeep
slackclient==2.9.1        # via -r requirements.in
smartcar==4.3.2           # via -r requirements.in
soupsieve==2.0.1          # via beautifulsoup4
sqlparse==0.3.1           # via django, django-debug-toolbar
tablib[html,ods,xls,xlsx,yaml]==2.0.0  # via django-import-export
tabulate==0.8.7           # via -r requirements.in
tblib==1.7.0              # via -r requirements.in
time-machine==1.2.1       # via -r requirements.in
toml==0.10.1              # via black, curlylint, dparse, pre-commit
traitlets==5.0.4          # via ipython
twisted[tls]==20.3.0      # via daphne
txaio==20.4.1             # via autobahn
typed-ast==1.4.1          # via black, mypy
typing-extensions==3.7.4.3  # via black, mypy
tzlocal==2.1              # via apscheduler
urllib3==1.25.10          # via botocore, requests, sentry-sdk
virtualenv==20.0.31       # via pre-commit
waitress==1.4.4           # via webtest
wcwidth==0.2.5            # via prompt-toolkit
webencodings==0.5.1       # via html5lib
webob==1.8.6              # via webtest
webtest==2.0.35           # via django-webtest
whitenoise==5.2.0         # via -r requirements.in
xlrd==1.2.0               # via tablib
xlwt==1.3.0               # via tablib
yarl==1.5.1               # via aiohttp
zeep==3.4.0               # via -r requirements.in
zope.interface==5.1.0     # via twisted

three.txt:

click~=7.1
colorama~=0.4
enlighten~=1.6.1
networkx~=2.3
numpy>=1.17.0
numba>=0.50
orjson~=3.1
pandas~=1.0
pint~=0.13
pyarrow~=0.17
pydantic~=1.5
PyYAML~=5.1
sentry-sdk~=0.15
tabulate>=0.8.7
termcolor~=1.1
7reactions
pradyunsgcommented, Sep 23, 2020

Spending some more time to debug this… pip’s new resolver is hitting the network even when the currently installed version does satisfy the version requested. Further, it’s also hitting the same index page (i.e. https://pypi.org/simple/{project}) each time we see it during the graph exploration, which is obviously the wrong thing to do.

That’s 100% a genuine bug, and I’ll file a new issue for tracking that.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Test Automation Strategy: Everything You Need to Know
This article will help you understand everything about test automation strategy and help understand how to build a good test automation ...
Read more >
How to Shift Automated Performance Testing Left - Perfecto
1. Build and Launch Tests ... First, you'll need to retrieve the latest version of the code and test it from your version...
Read more >
30 Top Automation Testing Tools In 2022 | LambdaTest
LambdaTest is a cloud-based cross browser testing platform where you can fasten your release speed with high-end test automation on the cloud.
Read more >
Performance Testing Tutorial – Types (Example) - Guru99
1. Know your physical test environment, production environment and what testing tools are available. 2. This includes goals and constraints for throughput, response...
Read more >
Performance Testing - The Complete Guide - Tricentis
Performance testing gathers all the tests that verify an application's speed, robustness, reliability, and correct sizing. It examines several indicators such ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found