From 2f88bfdf9673a5e14669da375b4aad4a29815fa9 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Sat, 8 May 2010 10:29:06 +0000 Subject: Issue #8084: ensure that the --user directory conforms to platforms standars on OSX when using a python framework. --- Lib/site.py | 17 +++++++++++------ Lib/sysconfig.py | 21 ++++++++++++++++++++- Misc/NEWS | 6 ++++++ 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/Lib/site.py b/Lib/site.py index 865fffb..cbf3325 100644 --- a/Lib/site.py +++ b/Lib/site.py @@ -243,6 +243,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 @@ -289,13 +296,11 @@ def getsitepackages(): if sys.platform == "darwin": # for framework builds *only* we add the standard Apple # locations. - if 'Python.framework' in prefix: - sitepackages.append( - os.path.expanduser( - os.path.join("~", "Library", "Python", - sys.version[:3], "site-packages"))) + from sysconfig import get_config_var + framework = get_config_var("PYTHONFRAMEWORK") + if framework and "/%s.framework/"%(framework,) in prefix: 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 a11a412..2ae761c 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") @@ -398,7 +413,6 @@ 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'): @@ -406,6 +420,11 @@ def get_config_vars(*args): 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 7f2cd53..6981319 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -38,6 +38,12 @@ Core and Builtins - Issue #8404: Fixed set operations on dictionary views. +- 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". + + + Library ------- -- cgit v0.12