Issue #28046: Remove platform-specific directories from sys.path

This commit is contained in:
Zachary Ware 2016-09-09 17:59:49 -07:00
parent b44acebc7b
commit c4b53afce4
10 changed files with 24 additions and 37 deletions

1
.gitignore vendored
View File

@ -21,7 +21,6 @@ Doc/venv/
Lib/distutils/command/*.pdb
Lib/lib2to3/*.pickle
Lib/test/data/*
Lib/plat-mac/errors.rsrc.df.rsrc
Makefile
Makefile.pre
Misc/python.pc

View File

@ -26,7 +26,6 @@ python-config$
python-config.py$
reflog.txt$
tags$
Lib/plat-mac/errors.rsrc.df.rsrc
Misc/python.pc
Misc/python-config.sh$
Modules/Setup$

View File

@ -341,6 +341,15 @@ def get_makefile_filename():
config_dir_name += '-%s' % sys.implementation._multiarch
return os.path.join(get_path('stdlib'), config_dir_name, 'Makefile')
def _get_sysconfigdata_name():
return '_sysconfigdata_{abi}_{platform}_{multiarch}'.format(
abi=sys.abiflags,
platform=sys.platform,
multiarch=getattr(sys.implementation, '_multiarch', ''),
)
def _generate_posix_vars():
"""Generate the Python module containing build-time variables."""
import pprint
@ -381,7 +390,7 @@ def _generate_posix_vars():
# _sysconfigdata module manually and populate it with the build vars.
# This is more than sufficient for ensuring the subsequent call to
# get_platform() succeeds.
name = '_sysconfigdata_' + sys.abiflags
name = _get_sysconfigdata_name()
if 'darwin' in sys.platform:
import types
module = types.ModuleType(name)
@ -407,7 +416,7 @@ def _generate_posix_vars():
def _init_posix(vars):
"""Initialize the module as appropriate for POSIX systems."""
# _sysconfigdata is generated at build time, see _generate_posix_vars()
name = '_sysconfigdata_' + sys.abiflags
name = _get_sysconfigdata_name()
_temp = __import__(name, globals(), locals(), ['build_time_vars'], 0)
build_time_vars = _temp.build_time_vars
vars.update(build_time_vars)

View File

@ -1292,7 +1292,8 @@ def buildPython():
import pprint
if getVersionMajorMinor() >= (3, 6):
path = os.path.join(path_to_lib, 'plat-darwin', '_sysconfigdata_m.py')
# XXX this is extra-fragile
path = os.path.join(path_to_lib, '_sysconfigdata_m_darwin_darwin.py')
else:
path = os.path.join(path_to_lib, '_sysconfigdata.py')
fp = open(path, 'r')

View File

@ -1178,8 +1178,6 @@ maninstall: altmaninstall
(cd $(DESTDIR)$(MANDIR)/man1; $(LN) -s python$(VERSION).1 python3.1)
# Install the library
PLATDIR= @PLATDIR@
MACHDEPS= $(PLATDIR)
XMLLIBSUBDIRS= xml xml/dom xml/etree xml/parsers xml/sax
LIBSUBDIRS= tkinter tkinter/test tkinter/test/test_tkinter \
tkinter/test/test_ttk site-packages test \
@ -1238,8 +1236,8 @@ LIBSUBDIRS= tkinter tkinter/test tkinter/test/test_tkinter \
multiprocessing multiprocessing/dummy \
unittest unittest/test unittest/test/testmock \
venv venv/scripts venv/scripts/posix \
curses pydoc_data $(MACHDEPS)
libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c
curses pydoc_data
libinstall: build_all $(srcdir)/Modules/xxmodule.c
@for i in $(SCRIPTDIR) $(LIBDEST); \
do \
if test ! -d $(DESTDIR)$$i; then \
@ -1294,10 +1292,10 @@ libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c
esac; \
done; \
done
$(INSTALL_DATA) `cat pybuilddir.txt`/_sysconfigdata_$(ABIFLAGS).py \
$(DESTDIR)$(LIBDEST)/$(PLATDIR); \
$(INSTALL_DATA) `cat pybuilddir.txt`/_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH).py \
$(DESTDIR)$(LIBDEST); \
echo $(INSTALL_DATA) `cat pybuilddir.txt`/_sysconfigdata_$(ABIFLAGS).py \
$(LIBDEST)/$(PLATDIR)
$(LIBDEST)
$(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
if test -d $(DESTDIR)$(LIBDEST)/distutils/tests; then \
$(INSTALL_DATA) $(srcdir)/Modules/xxmodule.c \
@ -1335,9 +1333,6 @@ libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
$(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/PatternGrammar.txt
$(srcdir)/Lib/$(PLATDIR):
mkdir $(srcdir)/Lib/$(PLATDIR)
python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh
# Substitution happens here, as the completely-expanded BINDIR
# is not available in configure
@ -1614,9 +1609,6 @@ clobber: clean profile-removal
-rm -rf build platform
-rm -rf $(PYTHONFRAMEWORKDIR)
-rm -f python-config.py python-config
if [ -n "$(MULTIARCH)" ]; then \
rm -rf $(srcdir)/Lib/$(PLATDIR); \
fi
# Make things extra clean, before making a distribution:
# remove all generated files, even Makefile[.pre]

View File

@ -10,6 +10,8 @@ What's New in Python 3.6.0 beta 1
Core and Builtins
-----------------
- Issue #28046: Remove platform-specific directories from sys.path.
- Issue #25758: Prevents zipimport from unnecessarily encoding a filename
(patch by Eryk Sun)

View File

@ -26,7 +26,7 @@
is set, we believe it. Otherwise, we use the path of our host .EXE's
to try and locate on of our "landmarks" and deduce our home.
- If we DO have a Python Home: The relevant sub-directories (Lib,
plat-win, etc) are based on the Python Home
DLLs, etc) are based on the Python Home
- If we DO NOT have a Python Home, the core Python Path is
loaded from the registry. This is the main PythonPath key,
and both HKLM and HKCU are combined to form the path)
@ -34,7 +34,7 @@
* Iff - we can not locate the Python Home, have not had a PYTHONPATH
specified, and can't locate any Registry entries (ie, we have _nothing_
we can assume is a good path), a default path with relative entries is
used (eg. .\Lib;.\plat-win, etc)
used (eg. .\Lib;.\DLLs, etc)
If a sys.path file exists adjacent to python.exe, it must contain a

View File

@ -67,8 +67,6 @@ def include_in_lib(p):
if p.is_dir():
if name in EXCLUDE_FROM_LIBRARY:
return False
if name.startswith('plat-'):
return False
if name == 'test' and p.parts[-2].lower() == 'lib':
return False
if name in {'test', 'tests'} and p.parts[-3].lower() == 'lib':

9
configure vendored
View File

@ -712,7 +712,6 @@ EGREP
NO_AS_NEEDED
MULTIARCH_CPPFLAGS
PLATFORM_TRIPLET
PLATDIR
MULTIARCH
ac_ct_CXX
MAINCC
@ -2929,7 +2928,7 @@ $as_echo_n "checking for python interpreter for cross build... " >&6; }
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $interp" >&5
$as_echo "$interp" >&6; }
PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp
PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib '$interp
fi
# Used to comment out stuff for rebuilding generated files
GENERATED_COMMENT='#'
@ -5361,12 +5360,6 @@ if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then
elif test x$PLATFORM_TRIPLET != x && test x$MULTIARCH = x; then
MULTIARCH=$PLATFORM_TRIPLET
fi
if test x$PLATFORM_TRIPLET = x; then
PLATDIR=plat-$MACHDEP
else
PLATDIR=plat-$PLATFORM_TRIPLET
fi
if test x$MULTIARCH != x; then
MULTIARCH_CPPFLAGS="-DMULTIARCH=\\\"$MULTIARCH\\\""

View File

@ -78,7 +78,7 @@ if test "$cross_compiling" = yes; then
AC_MSG_ERROR([python$PACKAGE_VERSION interpreter not found])
fi
AC_MSG_RESULT($interp)
PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp
PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib '$interp
fi
# Used to comment out stuff for rebuilding generated files
GENERATED_COMMENT='#'
@ -910,12 +910,6 @@ if test x$PLATFORM_TRIPLET != x && test x$MULTIARCH != x; then
elif test x$PLATFORM_TRIPLET != x && test x$MULTIARCH = x; then
MULTIARCH=$PLATFORM_TRIPLET
fi
if test x$PLATFORM_TRIPLET = x; then
PLATDIR=plat-$MACHDEP
else
PLATDIR=plat-$PLATFORM_TRIPLET
fi
AC_SUBST(PLATDIR)
AC_SUBST(PLATFORM_TRIPLET)
if test x$MULTIARCH != x; then
MULTIARCH_CPPFLAGS="-DMULTIARCH=\\\"$MULTIARCH\\\""