setuptools version
60.0.0
Python version
ALL
OS
ALL
Additional environment information
No response
Description
Since setuptools 60.0.0 has been released, Python startup has been impacted noticeably:
https://speed.python.org/timeline/#/?exe=12&ben=python_startup&env=1&revs=50&equid=off&quarts=on&extr=on
This is due to the new pth file that setuptools installs for injecting the distutils hack. The pth imports the _distutils_hack module and the ramifications of this import has a noticeable impact on startup time as you can see in the benchmark server.
Here is an estimation of the cost using -X importtime on my machine:
import time: 278 | 278 | types
import time: 112 | 112 | _operator
import time: 419 | 531 | operator
import time: 129 | 129 | itertools
import time: 325 | 325 | keyword
import time: 468 | 468 | reprlib
import time: 258 | 258 | _collections
import time: 978 | 2156 | collections
import time: 78 | 78 | _functools
import time: 835 | 3068 | functools
import time: 1359 | 5235 | enum
import time: 138 | 138 | _sre
import time: 497 | 497 | sre_constants
import time: 528 | 1025 | sre_parse
import time: 512 | 1674 | sre_compile
import time: 109 | 109 | _locale
import time: 886 | 886 | copyreg
import time: 671 | 8574 | re
import time: 471 | 471 | warnings
import time: 330 | 801 | importlib
import time: 906 | 10279 | _distutils_hack
This almost doubles the startup time (from 13501 us to 24093 us) and unfortunately, as almost all Python installations will have the pth file installed by default, all Python installations will double its startup time.
We have been working very hard to reduce startup time with things like frozen modules (https://bugs.python.org/issue45020) and other optimizations and is unfortunate that this gains are being lost due to this.
See: https://bugs.python.org/issue46110 for more information and discussion
Expected behavior
The distutils hack doesn't impact startup time.
How to Reproduce
Measure the time spent in python -c pass. You can use python -Ximporttime -c pass to generate the import time table for convenience and debugging.
Output
Relevant output of python -X importtime -c pass:
...
import time: 278 | 278 | types
import time: 112 | 112 | _operator
import time: 419 | 531 | operator
import time: 129 | 129 | itertools
import time: 325 | 325 | keyword
import time: 468 | 468 | reprlib
import time: 258 | 258 | _collections
import time: 978 | 2156 | collections
import time: 78 | 78 | _functools
import time: 835 | 3068 | functools
import time: 1359 | 5235 | enum
import time: 138 | 138 | _sre
import time: 497 | 497 | sre_constants
import time: 528 | 1025 | sre_parse
import time: 512 | 1674 | sre_compile
import time: 109 | 109 | _locale
import time: 886 | 886 | copyreg
import time: 671 | 8574 | re
import time: 471 | 471 | warnings
import time: 330 | 801 | importlib
import time: 906 | 10279 | _distutils_hack
...
Code of Conduct
setuptools version
Python version
ALL
OS
ALL
Additional environment information
No response
Description
Since setuptools 60.0.0 has been released, Python startup has been impacted noticeably:
https://speed.python.org/timeline/#/?exe=12&ben=python_startup&env=1&revs=50&equid=off&quarts=on&extr=on
This is due to the new pth file that setuptools installs for injecting the
distutilshack. The pth imports the_distutils_hackmodule and the ramifications of this import has a noticeable impact on startup time as you can see in the benchmark server.Here is an estimation of the cost using
-X importtimeon my machine:This almost doubles the startup time (from 13501 us to 24093 us) and unfortunately, as almost all Python installations will have the pth file installed by default, all Python installations will double its startup time.
We have been working very hard to reduce startup time with things like frozen modules (https://bugs.python.org/issue45020) and other optimizations and is unfortunate that this gains are being lost due to this.
See: https://bugs.python.org/issue46110 for more information and discussion
Expected behavior
The distutils hack doesn't impact startup time.
How to Reproduce
Measure the time spent in
python -c pass. You can usepython -Ximporttime -c passto generate the import time table for convenience and debugging.Output
Relevant output of
python -X importtime -c pass:Code of Conduct