[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