diff options
author | INADA Naoki <methane@users.noreply.github.com> | 2017-06-28 15:31:53 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-28 15:31:53 (GMT) |
commit | a8f8d5b4bd30dbe0828550469d98f12d2ebb2ef4 (patch) | |
tree | c980c5c35f6c0a8710b7c3ea1bda301b67a395eb /Lib/sysconfig.py | |
parent | 79d37ae979a65ada0b2ac820279ccc3b1cd41ba6 (diff) | |
download | cpython-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.py | 26 |
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): |