mirror of
https://git.yoctoproject.org/poky
synced 2026-02-02 23:08:43 +01:00
oe-core commit: 45afadf0b6 fixed the pip problem with purelib for
python2, even though the the patch stated it was for python3. This
patch addresses the purelib problem for python3.
If you install the package python3-pip you will have a pip3 binary
where you can see the problem on the device easily where the modules
install into the incorrect area and are not able to be referenced by
python3 at all.
Example error:
pip3 install imutils
pip3 list |grep imutils || echo ERROR no imutils
ERROR no imutils
python3 -c 'import imutils'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named 'imutils'
(From OE-Core rev: 54e0b3bfc132613902418be148a900b10f6d9e38)
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
364 lines
14 KiB
Diff
364 lines
14 KiB
Diff
From 51fe6f22d0ba113674fb358bd11d75fe659bd26e Mon Sep 17 00:00:00 2001
|
|
From: Khem Raj <raj.khem@gmail.com>
|
|
Date: Tue, 14 May 2013 15:00:26 -0700
|
|
Subject: [PATCH 01/13] get the sys.lib from python itself and do not use
|
|
hardcoded value of 'lib'
|
|
|
|
02/2015 Rebased for 3.4.2
|
|
|
|
Upstream-Status: Pending
|
|
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
|
Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
|
|
|
|
---
|
|
Include/pythonrun.h | 3 +++
|
|
Lib/distutils/command/install.py | 4 +++-
|
|
Lib/pydoc.py | 2 +-
|
|
Lib/site.py | 4 ++--
|
|
Lib/sysconfig.py | 18 +++++++++---------
|
|
Lib/trace.py | 4 ++--
|
|
Makefile.pre.in | 7 +++++--
|
|
Modules/getpath.c | 10 +++++++++-
|
|
Python/getplatform.c | 20 ++++++++++++++++++++
|
|
Python/sysmodule.c | 4 ++++
|
|
configure.ac | 35 +++++++++++++++++++++++++++++++++++
|
|
setup.py | 9 ++++-----
|
|
12 files changed, 97 insertions(+), 23 deletions(-)
|
|
|
|
Index: Python-3.5.4/Include/pythonrun.h
|
|
===================================================================
|
|
--- Python-3.5.4.orig/Include/pythonrun.h
|
|
+++ Python-3.5.4/Include/pythonrun.h
|
|
@@ -23,6 +23,9 @@ typedef struct {
|
|
} PyCompilerFlags;
|
|
#endif
|
|
|
|
+PyAPI_FUNC(const char *) Py_GetArch(void);
|
|
+PyAPI_FUNC(const char *) Py_GetLib(void);
|
|
+
|
|
#ifndef Py_LIMITED_API
|
|
PyAPI_FUNC(int) PyRun_SimpleStringFlags(const char *, PyCompilerFlags *);
|
|
PyAPI_FUNC(int) PyRun_AnyFileFlags(FILE *, const char *, PyCompilerFlags *);
|
|
Index: Python-3.5.4/Lib/distutils/command/install.py
|
|
===================================================================
|
|
--- Python-3.5.4.orig/Lib/distutils/command/install.py
|
|
+++ Python-3.5.4/Lib/distutils/command/install.py
|
|
@@ -19,6 +19,8 @@ from site import USER_BASE
|
|
from site import USER_SITE
|
|
HAS_USER_SITE = True
|
|
|
|
+libname = sys.lib
|
|
+
|
|
WINDOWS_SCHEME = {
|
|
'purelib': '$base/Lib/site-packages',
|
|
'platlib': '$base/Lib/site-packages',
|
|
@@ -29,8 +31,8 @@ WINDOWS_SCHEME = {
|
|
|
|
INSTALL_SCHEMES = {
|
|
'unix_prefix': {
|
|
- 'purelib': '$base/lib/python$py_version_short/site-packages',
|
|
- 'platlib': '$platbase/lib/python$py_version_short/site-packages',
|
|
+ 'purelib': '$platbase/'+libname+'/python$py_version_short/site-packages',
|
|
+ 'platlib': '$platbase/'+libname+'/python$py_version_short/site-packages',
|
|
'headers': '$base/include/python$py_version_short$abiflags/$dist_name',
|
|
'scripts': '$base/bin',
|
|
'data' : '$base',
|
|
Index: Python-3.5.4/Lib/pydoc.py
|
|
===================================================================
|
|
--- Python-3.5.4.orig/Lib/pydoc.py
|
|
+++ Python-3.5.4/Lib/pydoc.py
|
|
@@ -389,7 +389,7 @@ class Doc:
|
|
docmodule = docclass = docroutine = docother = docproperty = docdata = fail
|
|
|
|
def getdocloc(self, object,
|
|
- basedir=os.path.join(sys.base_exec_prefix, "lib",
|
|
+ basedir=os.path.join(sys.base_exec_prefix, sys.lib,
|
|
"python%d.%d" % sys.version_info[:2])):
|
|
"""Return the location of module docs or None"""
|
|
|
|
Index: Python-3.5.4/Lib/site.py
|
|
===================================================================
|
|
--- Python-3.5.4.orig/Lib/site.py
|
|
+++ Python-3.5.4/Lib/site.py
|
|
@@ -303,12 +303,12 @@ def getsitepackages(prefixes=None):
|
|
seen.add(prefix)
|
|
|
|
if os.sep == '/':
|
|
- sitepackages.append(os.path.join(prefix, "lib",
|
|
+ sitepackages.append(os.path.join(prefix, sys.lib,
|
|
"python" + sys.version[:3],
|
|
"site-packages"))
|
|
else:
|
|
sitepackages.append(prefix)
|
|
- sitepackages.append(os.path.join(prefix, "lib", "site-packages"))
|
|
+ sitepackages.append(os.path.join(prefix, sys.lib, "site-packages"))
|
|
if sys.platform == "darwin":
|
|
# for framework builds *only* we add the standard Apple
|
|
# locations.
|
|
Index: Python-3.5.4/Lib/sysconfig.py
|
|
===================================================================
|
|
--- Python-3.5.4.orig/Lib/sysconfig.py
|
|
+++ Python-3.5.4/Lib/sysconfig.py
|
|
@@ -20,10 +20,10 @@ __all__ = [
|
|
|
|
_INSTALL_SCHEMES = {
|
|
'posix_prefix': {
|
|
- 'stdlib': '{installed_base}/lib/python{py_version_short}',
|
|
- 'platstdlib': '{platbase}/lib/python{py_version_short}',
|
|
- 'purelib': '{base}/lib/python{py_version_short}/site-packages',
|
|
- 'platlib': '{platbase}/lib/python{py_version_short}/site-packages',
|
|
+ 'stdlib': '{installed_base}/'+sys.lib+'/python{py_version_short}',
|
|
+ 'platstdlib': '{platbase}/'+sys.lib+'/python{py_version_short}',
|
|
+ 'purelib': '{platbase}/'+sys.lib+'/python{py_version_short}/site-packages',
|
|
+ 'platlib': '{platbase}/'+sys.lib+'/python{py_version_short}/site-packages',
|
|
'include':
|
|
'{installed_base}/include/python{py_version_short}{abiflags}',
|
|
'platinclude':
|
|
@@ -32,10 +32,10 @@ _INSTALL_SCHEMES = {
|
|
'data': '{base}',
|
|
},
|
|
'posix_home': {
|
|
- 'stdlib': '{installed_base}/lib/python',
|
|
- 'platstdlib': '{base}/lib/python',
|
|
- 'purelib': '{base}/lib/python',
|
|
- 'platlib': '{base}/lib/python',
|
|
+ 'stdlib': '{installed_base}/'+sys.lib+'/python',
|
|
+ 'platstdlib': '{base}/'+sys.lib+'/python',
|
|
+ 'purelib': '{base}/'+sys.lib+'/python',
|
|
+ 'platlib': '{base}/'+sys.lib+'/python',
|
|
'include': '{installed_base}/include/python',
|
|
'platinclude': '{installed_base}/include/python',
|
|
'scripts': '{base}/bin',
|
|
@@ -61,10 +61,10 @@ _INSTALL_SCHEMES = {
|
|
'data': '{userbase}',
|
|
},
|
|
'posix_user': {
|
|
- 'stdlib': '{userbase}/lib/python{py_version_short}',
|
|
- 'platstdlib': '{userbase}/lib/python{py_version_short}',
|
|
- 'purelib': '{userbase}/lib/python{py_version_short}/site-packages',
|
|
- 'platlib': '{userbase}/lib/python{py_version_short}/site-packages',
|
|
+ 'stdlib': '{userbase}/'+sys.lib+'/python{py_version_short}',
|
|
+ 'platstdlib': '{userbase}/'+sys.lib+'/python{py_version_short}',
|
|
+ 'purelib': '{userbase}/'+sys.lib+'/python{py_version_short}/site-packages',
|
|
+ 'platlib': '{userbase}/'+sys.lib+'/python{py_version_short}/site-packages',
|
|
'include': '{userbase}/include/python{py_version_short}',
|
|
'scripts': '{userbase}/bin',
|
|
'data': '{userbase}',
|
|
Index: Python-3.5.4/Lib/trace.py
|
|
===================================================================
|
|
--- Python-3.5.4.orig/Lib/trace.py
|
|
+++ Python-3.5.4/Lib/trace.py
|
|
@@ -749,10 +749,10 @@ def main(argv=None):
|
|
# should I also call expanduser? (after all, could use $HOME)
|
|
|
|
s = s.replace("$prefix",
|
|
- os.path.join(sys.base_prefix, "lib",
|
|
+ os.path.join(sys.base_prefix, sys.lib,
|
|
"python" + sys.version[:3]))
|
|
s = s.replace("$exec_prefix",
|
|
- os.path.join(sys.base_exec_prefix, "lib",
|
|
+ os.path.join(sys.base_exec_prefix, sys.lib,
|
|
"python" + sys.version[:3]))
|
|
s = os.path.normpath(s)
|
|
ignore_dirs.append(s)
|
|
Index: Python-3.5.4/Makefile.pre.in
|
|
===================================================================
|
|
--- Python-3.5.4.orig/Makefile.pre.in
|
|
+++ Python-3.5.4/Makefile.pre.in
|
|
@@ -109,6 +109,8 @@ CFLAGS_ALIASING=@CFLAGS_ALIASING@
|
|
|
|
# Machine-dependent subdirectories
|
|
MACHDEP= @MACHDEP@
|
|
+LIB= @LIB@
|
|
+ARCH= @ARCH@
|
|
|
|
# Multiarch directory (may be empty)
|
|
MULTIARCH= @MULTIARCH@
|
|
@@ -128,7 +130,7 @@ LIBDIR= @libdir@
|
|
MANDIR= @mandir@
|
|
INCLUDEDIR= @includedir@
|
|
CONFINCLUDEDIR= $(exec_prefix)/include
|
|
-SCRIPTDIR= $(prefix)/lib
|
|
+SCRIPTDIR= @libdir@
|
|
ABIFLAGS= @ABIFLAGS@
|
|
|
|
# Detailed destination directories
|
|
@@ -731,6 +733,7 @@ Modules/getpath.o: $(srcdir)/Modules/get
|
|
-DEXEC_PREFIX='"$(exec_prefix)"' \
|
|
-DVERSION='"$(VERSION)"' \
|
|
-DVPATH='"$(VPATH)"' \
|
|
+ -DARCH='"$(ARCH)"' -DLIB='"$(LIB)"' \
|
|
-o $@ $(srcdir)/Modules/getpath.c
|
|
|
|
Programs/python.o: $(srcdir)/Programs/python.c
|
|
@@ -813,7 +816,7 @@ regen-opcode:
|
|
Python/compile.o Python/symtable.o Python/ast.o: $(srcdir)/Include/graminit.h $(srcdir)/Include/Python-ast.h
|
|
|
|
Python/getplatform.o: $(srcdir)/Python/getplatform.c
|
|
- $(CC) -c $(PY_CORE_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c
|
|
+ $(CC) -c $(PY_CORE_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -DARCH='"$(ARCH)"' -DLIB='"$(LIB)"' -o $@ $(srcdir)/Python/getplatform.c
|
|
|
|
Python/importdl.o: $(srcdir)/Python/importdl.c
|
|
$(CC) -c $(PY_CORE_CFLAGS) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c
|
|
Index: Python-3.5.4/Modules/getpath.c
|
|
===================================================================
|
|
--- Python-3.5.4.orig/Modules/getpath.c
|
|
+++ Python-3.5.4/Modules/getpath.c
|
|
@@ -105,6 +105,13 @@
|
|
#error "PREFIX, EXEC_PREFIX, VERSION, and VPATH must be constant defined"
|
|
#endif
|
|
|
|
+#define LIB_PYTHON LIB "/python" VERSION
|
|
+
|
|
+#ifndef PYTHONPATH
|
|
+#define PYTHONPATH PREFIX "/" LIB_PYTHON ":" \
|
|
+ EXEC_PREFIX "/" LIB_PYTHON "/lib-dynload"
|
|
+#endif
|
|
+
|
|
#ifndef LANDMARK
|
|
#define LANDMARK L"os.py"
|
|
#endif
|
|
@@ -113,6 +120,7 @@ static wchar_t prefix[MAXPATHLEN+1];
|
|
static wchar_t exec_prefix[MAXPATHLEN+1];
|
|
static wchar_t progpath[MAXPATHLEN+1];
|
|
static wchar_t *module_search_path = NULL;
|
|
+static wchar_t *lib_python = L"" LIB_PYTHON;
|
|
|
|
/* Get file status. Encode the path to the locale encoding. */
|
|
|
|
@@ -494,7 +502,7 @@ calculate_path(void)
|
|
_pythonpath = Py_DecodeLocale(PYTHONPATH, NULL);
|
|
_prefix = Py_DecodeLocale(PREFIX, NULL);
|
|
_exec_prefix = Py_DecodeLocale(EXEC_PREFIX, NULL);
|
|
- lib_python = Py_DecodeLocale("lib/python" VERSION, NULL);
|
|
+ lib_python = Py_DecodeLocale(LIB_PYTHON, NULL);
|
|
|
|
if (!_pythonpath || !_prefix || !_exec_prefix || !lib_python) {
|
|
Py_FatalError(
|
|
Index: Python-3.5.4/Python/getplatform.c
|
|
===================================================================
|
|
--- Python-3.5.4.orig/Python/getplatform.c
|
|
+++ Python-3.5.4/Python/getplatform.c
|
|
@@ -10,3 +10,23 @@ Py_GetPlatform(void)
|
|
{
|
|
return PLATFORM;
|
|
}
|
|
+
|
|
+#ifndef ARCH
|
|
+#define ARCH "unknown"
|
|
+#endif
|
|
+
|
|
+const char *
|
|
+Py_GetArch(void)
|
|
+{
|
|
+ return ARCH;
|
|
+}
|
|
+
|
|
+#ifndef LIB
|
|
+#define LIB "lib"
|
|
+#endif
|
|
+
|
|
+const char *
|
|
+Py_GetLib(void)
|
|
+{
|
|
+ return LIB;
|
|
+}
|
|
Index: Python-3.5.4/Python/sysmodule.c
|
|
===================================================================
|
|
--- Python-3.5.4.orig/Python/sysmodule.c
|
|
+++ Python-3.5.4/Python/sysmodule.c
|
|
@@ -1827,6 +1827,10 @@ _PySys_Init(void)
|
|
PyUnicode_FromString(Py_GetCopyright()));
|
|
SET_SYS_FROM_STRING("platform",
|
|
PyUnicode_FromString(Py_GetPlatform()));
|
|
+ SET_SYS_FROM_STRING("arch",
|
|
+ PyUnicode_FromString(Py_GetArch()));
|
|
+ SET_SYS_FROM_STRING("lib",
|
|
+ PyUnicode_FromString(Py_GetLib()));
|
|
SET_SYS_FROM_STRING("executable",
|
|
PyUnicode_FromWideChar(
|
|
Py_GetProgramFullPath(), -1));
|
|
Index: Python-3.5.4/configure.ac
|
|
===================================================================
|
|
--- Python-3.5.4.orig/configure.ac
|
|
+++ Python-3.5.4/configure.ac
|
|
@@ -885,6 +885,41 @@ PLATDIR=plat-$MACHDEP
|
|
AC_SUBST(PLATDIR)
|
|
AC_SUBST(PLATFORM_TRIPLET)
|
|
|
|
+AC_SUBST(ARCH)
|
|
+AC_MSG_CHECKING(ARCH)
|
|
+ARCH=`uname -m`
|
|
+case $ARCH in
|
|
+i?86) ARCH=i386;;
|
|
+esac
|
|
+AC_MSG_RESULT($ARCH)
|
|
+
|
|
+AC_SUBST(LIB)
|
|
+AC_MSG_CHECKING(LIB)
|
|
+case $ac_sys_system in
|
|
+Linux*)
|
|
+ # Test if the compiler is 64bit
|
|
+ echo 'int i;' > conftest.$ac_ext
|
|
+ python_cv_cc_64bit_output=no
|
|
+ if AC_TRY_EVAL(ac_compile); then
|
|
+ case `/usr/bin/file conftest.$ac_objext` in
|
|
+ *"ELF 64"*)
|
|
+ python_cv_cc_64bit_output=yes
|
|
+ ;;
|
|
+ esac
|
|
+ fi
|
|
+ rm -rf conftest*
|
|
+ ;;
|
|
+esac
|
|
+
|
|
+case $ARCH:$python_cv_cc_64bit_output in
|
|
+ppc64:yes | powerpc64:yes | s390x:yes | sparc64:yes | x86_64:yes)
|
|
+ LIB="lib64"
|
|
+ ;;
|
|
+*:*)
|
|
+ LIB="lib"
|
|
+ ;;
|
|
+esac
|
|
+AC_MSG_RESULT($LIB)
|
|
|
|
AC_MSG_CHECKING([for -Wl,--no-as-needed])
|
|
save_LDFLAGS="$LDFLAGS"
|
|
Index: Python-3.5.4/setup.py
|
|
===================================================================
|
|
--- Python-3.5.4.orig/setup.py
|
|
+++ Python-3.5.4/setup.py
|
|
@@ -494,7 +494,7 @@ class PyBuildExt(build_ext):
|
|
# directories (i.e. '.' and 'Include') must be first. See issue
|
|
# 10520.
|
|
if not cross_compiling:
|
|
- add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
|
|
+ add_dir_to_list(self.compiler.library_dirs, os.path.join('/usr/local', sys.lib))
|
|
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
|
|
# only change this for cross builds for 3.3, issues on Mageia
|
|
if cross_compiling:
|
|
@@ -552,8 +552,7 @@ class PyBuildExt(build_ext):
|
|
# be assumed that no additional -I,-L directives are needed.
|
|
if not cross_compiling:
|
|
lib_dirs = self.compiler.library_dirs + [
|
|
- '/lib64', '/usr/lib64',
|
|
- '/lib', '/usr/lib',
|
|
+ '/' + sys.lib, '/usr/' + sys.lib,
|
|
]
|
|
inc_dirs = self.compiler.include_dirs + ['/usr/include']
|
|
else:
|
|
@@ -745,11 +744,11 @@ class PyBuildExt(build_ext):
|
|
elif curses_library:
|
|
readline_libs.append(curses_library)
|
|
elif self.compiler.find_library_file(lib_dirs +
|
|
- ['/usr/lib/termcap'],
|
|
+ ['/usr/'+sys.lib+'/termcap'],
|
|
'termcap'):
|
|
readline_libs.append('termcap')
|
|
exts.append( Extension('readline', ['readline.c'],
|
|
- library_dirs=['/usr/lib/termcap'],
|
|
+ library_dirs=['/usr/'+sys.lib+'/termcap'],
|
|
extra_link_args=readline_extra_link_args,
|
|
libraries=readline_libs) )
|
|
else:
|