mirror of
https://github.com/python/cpython.git
synced 2025-07-31 07:04:42 +00:00
Issue #7880: Fix sysconfig when the python executable is a symbolic link.
This commit is contained in:
parent
3ec32005e8
commit
85677617d5
3 changed files with 27 additions and 7 deletions
|
@ -3,7 +3,7 @@
|
||||||
"""
|
"""
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
from os.path import pardir, abspath
|
from os.path import pardir, realpath
|
||||||
|
|
||||||
_INSTALL_SCHEMES = {
|
_INSTALL_SCHEMES = {
|
||||||
'posix_prefix': {
|
'posix_prefix': {
|
||||||
|
@ -84,16 +84,16 @@ _PREFIX = os.path.normpath(sys.prefix)
|
||||||
_EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
|
_EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
|
||||||
_CONFIG_VARS = None
|
_CONFIG_VARS = None
|
||||||
_USER_BASE = 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():
|
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
|
# PC/VS7.1
|
||||||
if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower():
|
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
|
# PC/AMD64
|
||||||
if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower():
|
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():
|
def is_python_build():
|
||||||
for fn in ("Setup.dist", "Setup.local"):
|
for fn in ("Setup.dist", "Setup.local"):
|
||||||
|
@ -294,7 +294,7 @@ def _init_non_posix(vars):
|
||||||
vars['SO'] = '.pyd'
|
vars['SO'] = '.pyd'
|
||||||
vars['EXE'] = '.exe'
|
vars['EXE'] = '.exe'
|
||||||
vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT
|
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
|
# public APIs
|
||||||
|
|
|
@ -8,9 +8,10 @@ import unittest
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
import subprocess
|
||||||
from copy import copy, deepcopy
|
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
|
import sysconfig
|
||||||
from sysconfig import (get_paths, get_platform, get_config_vars,
|
from sysconfig import (get_paths, get_platform, get_config_vars,
|
||||||
|
@ -238,6 +239,23 @@ class TestSysConfig(unittest.TestCase):
|
||||||
'posix_prefix', 'posix_user')
|
'posix_prefix', 'posix_user')
|
||||||
self.assertEquals(get_scheme_names(), wanted)
|
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():
|
def test_main():
|
||||||
run_unittest(TestSysConfig)
|
run_unittest(TestSysConfig)
|
||||||
|
|
|
@ -20,6 +20,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #7880: Fix sysconfig when the python executable is a symbolic link.
|
||||||
|
|
||||||
- Issue #7624: Fix isinstance(foo(), collections.Callable) for old-style
|
- Issue #7624: Fix isinstance(foo(), collections.Callable) for old-style
|
||||||
classes.
|
classes.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue