diff --git a/Lib/site.py b/Lib/site.py index d99b538b5c4..8563df24645 100644 --- a/Lib/site.py +++ b/Lib/site.py @@ -240,6 +240,13 @@ def getusersitepackages(): from sysconfig import get_path import os + + if sys.platform == 'darwin': + from sysconfig import get_config_var + if get_config_var('PYTHONFRAMEWORK'): + USER_SITE = get_path('purelib', 'osx_framework_user') + return USER_SITE + USER_SITE = get_path('purelib', '%s_user' % os.name) return USER_SITE @@ -286,13 +293,11 @@ def getsitepackages(): if sys.platform == "darwin": # for framework builds *only* we add the standard Apple # locations. - if 'Python.framework' in prefix: + from sysconfig import get_config_var + framework = get_config_var("PYTHONFRAMEWORK") + if framework and "/%s.framework/"%(framework,) in prefix: sitepackages.append( - os.path.expanduser( - os.path.join("~", "Library", "Python", - sys.version[:3], "site-packages"))) - sitepackages.append( - os.path.join("/Library", "Python", + os.path.join("/Library", framework, sys.version[:3], "site-packages")) return sitepackages diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py index 0122f084765..f38c8d23bd0 100644 --- a/Lib/sysconfig.py +++ b/Lib/sysconfig.py @@ -73,6 +73,15 @@ _INSTALL_SCHEMES = { 'scripts': '{userbase}/bin', 'data' : '{userbase}', }, + 'osx_framework_user': { + 'stdlib': '{userbase}/lib/python', + 'platstdlib': '{userbase}/lib/python', + 'purelib': '{userbase}/lib/python/site-packages', + 'platlib': '{userbase}/lib/python/site-packages', + 'include': '{userbase}/include', + 'scripts': '{userbase}/bin', + 'data' : '{userbase}', + }, } _SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', @@ -157,6 +166,12 @@ def _getuserbase(): base = os.environ.get("APPDATA") or "~" return env_base if env_base else joinuser(base, "Python") + if sys.platform == "darwin": + framework = get_config_var("PYTHONFRAMEWORK") + if framework: + return joinuser("~", "Library", framework, "%d.%d"%( + sys.version_info[:2])) + return env_base if env_base else joinuser("~", ".local") @@ -400,13 +415,17 @@ def get_config_vars(*args): _CONFIG_VARS['py_version_nodot'] = _PY_VERSION[0] + _PY_VERSION[2] _CONFIG_VARS['base'] = _PREFIX _CONFIG_VARS['platbase'] = _EXEC_PREFIX - _CONFIG_VARS['userbase'] = _getuserbase() _CONFIG_VARS['projectbase'] = _PROJECT_BASE if os.name in ('nt', 'os2'): _init_non_posix(_CONFIG_VARS) if os.name == 'posix': _init_posix(_CONFIG_VARS) + # Setting 'userbase' is done below the call to the + # init function to enable using 'get_config_var' in + # the init-function. + _CONFIG_VARS['userbase'] = _getuserbase() + if 'srcdir' not in _CONFIG_VARS: _CONFIG_VARS['srcdir'] = _PROJECT_BASE diff --git a/Misc/NEWS b/Misc/NEWS index d84f1dcf9d5..98ec0d27efb 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -290,6 +290,9 @@ Core and Builtins - Issue #7072: isspace(0xa0) is true on Mac OS X +- Issue #8084: PEP 370 now conforms to system conventions for framework + builds on MacOS X. That is, "python setup.py install --user" will install + into "~/Library/Python/2.7" instead of "~/.local". C-API -----