summaryrefslogtreecommitdiffstats
path: root/Lib/sysconfig.py
diff options
context:
space:
mode:
authorINADA Naoki <methane@users.noreply.github.com>2017-06-28 15:31:53 (GMT)
committerGitHub <noreply@github.com>2017-06-28 15:31:53 (GMT)
commita8f8d5b4bd30dbe0828550469d98f12d2ebb2ef4 (patch)
treec980c5c35f6c0a8710b7c3ea1bda301b67a395eb /Lib/sysconfig.py
parent79d37ae979a65ada0b2ac820279ccc3b1cd41ba6 (diff)
downloadcpython-a8f8d5b4bd30dbe0828550469d98f12d2ebb2ef4.zip
cpython-a8f8d5b4bd30dbe0828550469d98f12d2ebb2ef4.tar.gz
cpython-a8f8d5b4bd30dbe0828550469d98f12d2ebb2ef4.tar.bz2
bpo-29585: optimize site.py startup time (GH-136)
Avoid importing `sysconfig` from `site` by copying minimum code. Python startup is 5% faster on Linux and 30% faster on macOS
Diffstat (limited to 'Lib/sysconfig.py')
-rw-r--r--Lib/sysconfig.py26
1 files changed, 10 insertions, 16 deletions
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
index ed0a34d..e6618b1 100644
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
@@ -51,6 +51,7 @@ _INSTALL_SCHEMES = {
'scripts': '{base}/Scripts',
'data': '{base}',
},
+ # NOTE: When modifying "purelib" scheme, update site._get_path() too.
'nt_user': {
'stdlib': '{userbase}/Python{py_version_nodot}',
'platstdlib': '{userbase}/Python{py_version_nodot}',
@@ -177,32 +178,25 @@ def _get_default_scheme():
return os.name
+# NOTE: site.py has copy of this function.
+# Sync it when modify this function.
def _getuserbase():
env_base = os.environ.get("PYTHONUSERBASE", None)
+ if env_base:
+ return env_base
def joinuser(*args):
return os.path.expanduser(os.path.join(*args))
if os.name == "nt":
base = os.environ.get("APPDATA") or "~"
- if env_base:
- return env_base
- else:
- return joinuser(base, "Python")
+ return joinuser(base, "Python")
- if sys.platform == "darwin":
- framework = get_config_var("PYTHONFRAMEWORK")
- if framework:
- if env_base:
- return env_base
- else:
- return joinuser("~", "Library", framework, "%d.%d" %
- sys.version_info[:2])
+ if sys.platform == "darwin" and sys._framework:
+ return joinuser("~", "Library", sys._framework,
+ "%d.%d" % sys.version_info[:2])
- if env_base:
- return env_base
- else:
- return joinuser("~", ".local")
+ return joinuser("~", ".local")
def _parse_makefile(filename, vars=None):