Open asottile opened 2 years ago
FWIW, on Windows x64 with Python 3.10.2 (conda) and Setuptools 65.5.0, I'm seeing a 25x slowdown (40 ms to 1 s) with -X importtime
, and a ≈80x slowdown (10-11 ms to 780-860 ms) with -m timeit
. (Just importing distutils
(rather than distutils.version
) only shaved around 2 ms off on average, though while it was well within the margin of error for local
, it made a non-trivial relative difference for stdlib, to about 8 ms or around a 100x speedup under timeit
.)
With timeit:
$ SETUPTOOLS_USE_DISTUTILS=local python -m timeit -n 1 -r 1 'import distutils.version'
1 loop, best of 1: 806 msec per loop
$ SETUPTOOLS_USE_DISTUTILS=stdlib python -m timeit -n 1 -r 1 'import distutils.version'
1 loop, best of 1: 10 msec per loop
With importtime:
$ SETUPTOOLS_USE_DISTUTILS=local python -X importtime -c 'import distutils.version'
import time: self [us] | cumulative | imported package
[...]
import time: 9827 | 1014210 | distutils
import time: 2366 | 1016576 | distutils.version
$ SETUPTOOLS_USE_DISTUTILS=stdlib python -X importtime -c 'import distutils.version'
import time: self [us] | cumulative | imported package
[...]
import time: 2598 | 39466 | distutils
import time: 2423 | 41889 | distutils.version
For reference, I've also provided the full -X importtime
tree output for both scenarios, profiling where most of the import-time cost comes from. If lazy imports makes it into 3.12, perhaps that could defray a large amount of the cost?
In Gentoo:
# SETUPTOOLS_USE_DISTUTILS=stdlib python -m timeit -n 1 -r 1 'import distutils.version'
<timeit-src>:6: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives
1 loop, best of 1: 2.32 msec per loop
# SETUPTOOLS_USE_DISTUTILS=local python -m timeit -n 1 -r 1 'import distutils.version'
1 loop, best of 1: 414 msec per loop
Note that the number of setuptools plugins installed probably matters (which is why using setuptools itself is slow).
setuptools version
setuptools==65.3.0
Python version
python 3.8.10
OS
ubuntu 20.04
Additional environment information
No response
Description
when using the bundled
distutils
, importing any part of distutils takes almost 10x longer than previouslyI originally started with trying to figure out why
virtualenv
got way slower recently and ended up tracing it to setuptools>=60Expected behavior
I expect the bundled distutils to not incur the import time problems of
setuptools
How to Reproduce
compare the following:
time env SETUPTOOLS_USE_DISTUTILS=local venv3/bin/python3 -c 'import distutils.version'
time env SETUPTOOLS_USE_DISTUTILS=stdlib venv3/bin/python3 -c 'import distutils.version'
Output
best-of
here is just a script which runs the command in a loop and reports the fastest time --time
also works to reproduce this