summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorent Xicluna <florent.xicluna@gmail.com>2010-03-10 23:58:42 (GMT)
committerFlorent Xicluna <florent.xicluna@gmail.com>2010-03-10 23:58:42 (GMT)
commit85677617d51f607b41ac64bf4cca8c38b6fd771a (patch)
tree538886c8d2171ea7e887583a216badbad15c4dfb
parent3ec32005e8fa40c2471e7869a6e49407241442ab (diff)
downloadcpython-85677617d51f607b41ac64bf4cca8c38b6fd771a.zip
cpython-85677617d51f607b41ac64bf4cca8c38b6fd771a.tar.gz
cpython-85677617d51f607b41ac64bf4cca8c38b6fd771a.tar.bz2
Issue #7880: Fix sysconfig when the python executable is a symbolic link.
-rw-r--r--Lib/sysconfig.py12
-rw-r--r--Lib/test/test_sysconfig.py20
-rw-r--r--Misc/NEWS2
3 files changed, 27 insertions, 7 deletions
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
index 0c13bba..69264d2 100644
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
@@ -3,7 +3,7 @@
"""
import sys
import os
-from os.path import pardir, abspath
+from os.path import pardir, realpath
_INSTALL_SCHEMES = {
'posix_prefix': {
@@ -84,16 +84,16 @@ _PREFIX = os.path.normpath(sys.prefix)
_EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
_CONFIG_VARS = None
_USER_BASE = None
-_PROJECT_BASE = abspath(os.path.dirname(sys.executable))
+_PROJECT_BASE = os.path.dirname(realpath(sys.executable))
if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower():
- _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir))
+ _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir))
# PC/VS7.1
if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower():
- _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir, pardir))
+ _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir, pardir))
# PC/AMD64
if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower():
- _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir, pardir))
+ _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir, pardir))
def is_python_build():
for fn in ("Setup.dist", "Setup.local"):
@@ -294,7 +294,7 @@ def _init_non_posix(vars):
vars['SO'] = '.pyd'
vars['EXE'] = '.exe'
vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT
- vars['BINDIR'] = os.path.dirname(os.path.abspath(sys.executable))
+ vars['BINDIR'] = os.path.dirname(realpath(sys.executable))
#
# public APIs
diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py
index c8bae73..606ccd0 100644
--- a/Lib/test/test_sysconfig.py
+++ b/Lib/test/test_sysconfig.py
@@ -8,9 +8,10 @@ import unittest
import sys
import os
import shutil
+import subprocess
from copy import copy, deepcopy
-from test.test_support import run_unittest, TESTFN
+from test.test_support import run_unittest, TESTFN, unlink, get_attribute
import sysconfig
from sysconfig import (get_paths, get_platform, get_config_vars,
@@ -238,6 +239,23 @@ class TestSysConfig(unittest.TestCase):
'posix_prefix', 'posix_user')
self.assertEquals(get_scheme_names(), wanted)
+ def test_symlink(self):
+ # Issue 7880
+ symlink = get_attribute(os, "symlink")
+ def get(python):
+ cmd = [python, '-c',
+ 'import sysconfig; print sysconfig.get_platform()']
+ p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ return p.communicate()
+ real = os.path.realpath(sys.executable)
+ link = os.path.abspath(TESTFN)
+ symlink(real, link)
+ try:
+ self.assertEqual(get(real), get(link))
+ finally:
+ unlink(link)
+
def test_main():
run_unittest(TestSysConfig)
diff --git a/Misc/NEWS b/Misc/NEWS
index 85fe3c0..8f450a9 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -20,6 +20,8 @@ Core and Builtins
Library
-------
+- Issue #7880: Fix sysconfig when the python executable is a symbolic link.
+
- Issue #7624: Fix isinstance(foo(), collections.Callable) for old-style
classes.