[Distutils] bdist_rpm and bdist on x86-64
M.-A. Lemburg
mal at egenix.com
Fri Apr 15 22:06:19 CEST 2005
Jeremy Sanders wrote:
> On Fri, 15 Apr 2005, M.-A. Lemburg wrote:
>
>> Check the Makefile you Python version has installed in
>> lib/pythonX.X/config/Makefile
>
>
> There is no /usr/lib/python2.3/config/Makefile. It is installed in
> /usr/lib64/python2.3/config/Makefile.
>
> That file contains
>
> # Expanded directories
> BINDIR= $(exec_prefix)/bin
> LIBDIR= $(exec_prefix)/lib64
> MANDIR= /usr/share/man
> INCLUDEDIR= /usr/include
> CONFINCLUDEDIR= $(exec_prefix)/include
> SCRIPTDIR= $(prefix)/lib64
>
> # Detailed destination directories
> BINLIBDEST= $(LIBDIR)/python$(VERSION)
> LIBDEST= $(SCRIPTDIR)/python$(VERSION)
> INCLUDEPY= $(INCLUDEDIR)/python$(VERSION)
> CONFINCLUDEPY= $(CONFINCLUDEDIR)/python$(VERSION)
> LIBP= $(LIBDIR)/python$(VERSION)
>
> So it looks like distutils is looking in the wrong place.
>
> If you look in sysconfig.py:
>
> def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
> """Return the directory containing the Python library (standard or
> site additions).
>
> If 'plat_specific' is true, return the directory containing
> platform-specific modules, i.e. any module from a non-pure-Python
> module distribution; otherwise, return the platform-shared library
> directory. If 'standard_lib' is true, return the directory
> containing standard Python library modules; otherwise, return the
> directory for site-specific modules.
>
> If 'prefix' is supplied, use it instead of sys.prefix or
> sys.exec_prefix -- i.e., ignore 'plat_specific'.
> """
> if prefix is None:
> prefix = plat_specific and EXEC_PREFIX or PREFIX
>
> if os.name == "posix":
> libpython = os.path.join(prefix,
> "lib", "python" + get_python_version())
This is the problem line ^^^^^^^
> if standard_lib:
> return libpython
> else:
> return os.path.join(libpython, "site-packages")
>
> elif os.name == "nt":
> if standard_lib:
> return os.path.join(prefix, "Lib")
> else:
> if get_python_version() < "2.2":
> return prefix
> else:
> return os.path.join(PREFIX, "Lib", "site-packages")
>
> elif os.name == "mac":
> if plat_specific:
> if standard_lib:
> return os.path.join(prefix, "Lib", "lib-dynload")
> else:
> return os.path.join(prefix, "Lib", "site-packages")
> else:
> if standard_lib:
> return os.path.join(prefix, "Lib")
> else:
> return os.path.join(prefix, "Lib", "site-packages")
>
> elif os.name == "os2":
> if standard_lib:
> return os.path.join(PREFIX, "Lib")
> else:
> return os.path.join(PREFIX, "Lib", "site-packages")
>
> else:
> raise DistutilsPlatformError(
> "I don't know where Python installs its library "
> "on platform '%s'" % os.name)
>
>
> Under the posix section, distutils assumes that Python is installed in
> /usr/lib/python-X.X, where it's really in /usr/lib64/python-X.X. This is
> clearly a distutils bug. Distutils should be looking under lib64 for
> 64-bit x86 systems.
>
> All linux x86-64 distributions use lib64 instead of lib for 64 bit
> libraries. It looks like this code needs to be cleverer.
Patches are welcome :-)
--
Marc-Andre Lemburg
eGenix.com
Professional Python Services directly from the Source (#1, Apr 15 2005)
>>> Python/Zope Consulting and Support ... http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/
________________________________________________________________________
::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! ::::
More information about the Distutils-SIG
mailing list