]> granicus.if.org Git - python/commitdiff
Issue #8084: ensure that the --user directory
authorRonald Oussoren <ronaldoussoren@mac.com>
Sat, 8 May 2010 10:29:06 +0000 (10:29 +0000)
committerRonald Oussoren <ronaldoussoren@mac.com>
Sat, 8 May 2010 10:29:06 +0000 (10:29 +0000)
conforms to platforms standars on OSX when
using a python framework.

Lib/site.py
Lib/sysconfig.py
Misc/NEWS

index 865fffb7b52970412f6ef5800919061fcae51b33..cbf3325166df943388f352c9c98724fff8147c15 100644 (file)
@@ -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
 
index a11a41247583f7d40bc5feed7d29444bb6fd7601..2ae761cad1153d43f41cf6d5b0d57cce6ce4a2ac 100644 (file)
@@ -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
 
index 7f2cd53ca7da7f4f105751db879158257dcef06d..69813193be5337b61b37a2bcd847595b859ee1c6 100644 (file)
--- 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
 -------