bpo-29585: optimize site.py startup time by methane · Pull Request #136 · python/cpython
Hum, did I miss something? sysconfig is still imported by the site module on macOS by getsitepackages():
if sys.platform == "darwin":
# for framework builds *only* we add the standard Apple
# locations.
from sysconfig import get_config_var
framework = get_config_var("PYTHONFRAMEWORK")
if framework:
sitepackages.append(
os.path.join("/Library", framework,
'%d.%d' % sys.version_info[:2], "site-packages"))
macbook:master haypo$ ./python.exe -c 'import sys; print("sysconfig" in sys.modules)'
True
I suggest this additionnal change:
diff --git a/Lib/site.py b/Lib/site.py
index 500c59b..929252d 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -334,15 +334,12 @@ def getsitepackages(prefixes=None):
else:
sitepackages.append(prefix)
sitepackages.append(os.path.join(prefix, "lib", "site-packages"))
- if sys.platform == "darwin":
- # for framework builds *only* we add the standard Apple
- # locations.
- from sysconfig import get_config_var
- framework = get_config_var("PYTHONFRAMEWORK")
- if framework:
- sitepackages.append(
- os.path.join("/Library", framework,
- '%d.%d' % sys.version_info[:2], "site-packages"))
+ # for framework builds *only* we add the standard Apple
+ # locations.
+ if sys.platform == "darwin" and sys._framework:
+ sitepackages.append(
+ os.path.join("/Library", sys._framework,
+ '%d.%d' % sys.version_info[:2], "site-packages"))
return sitepackages
def addsitepackages(known_paths, prefixes=None):
With this additionnal change, the speedup on macOS is quite significant: -13.4 ms (1.61x faster)!
macbook:master haypo$ ./python.exe -m perf command --inherit=PYTHONPATH -v -o ref.json -- ./python.exe -c pass
...
macbook:master haypo$ ./python.exe -m perf command --inherit=PYTHONPATH -v -o pr136.json -- ./python.exe -c pass
...
macbook:master haypo$ ./python.exe -m perf compare_to ref.json pr136.json
Mean +- std dev: [ref] 35.4 ms +- 1.7 ms -> [pr136] 22.0 ms +- 1.9 ms: 1.61x faster (-38%)
cc @1st1: Yury, since you use macOS, you probably want to see this change merged :-)