Difference between revisions of "Python"

From CBLFS
Jump to navigationJump to search
m (Reverted edits by Oppiz (Talk); changed back to last version by Xep)
Line 3: Line 3:
 
!Download Source:
 
!Download Source:
 
| http://www.python.org/ftp/python/{{Python-Version}}/Python-{{Python-Version}}.tar.bz2
 
| http://www.python.org/ftp/python/{{Python-Version}}/Python-{{Python-Version}}.tar.bz2
|-valign="top"
 
!Required Patch:
 
| http://svn.cross-lfs.org/svn/repos/patches/Python/Python-{{Python-Version}}-gdbm-1.patch
 
 
|-valign='top"
 
|-valign='top"
 
!Required Patch (For Multilib):
 
!Required Patch (For Multilib):
Line 32: Line 29:
  
 
  sed -i "s@/usr/X11R6@${XORG_PREFIX}@g" setup.py &&
 
  sed -i "s@/usr/X11R6@${XORG_PREFIX}@g" setup.py &&
patch -Np1 -i ../Python-{{Python-Version}}-gdbm-1.patch &&
 
 
  ./configure --prefix=/usr --enable-shared &&
 
  ./configure --prefix=/usr --enable-shared &&
  make EXTRA_CFLAGS="-fwrapv"
+
  make
  
 
Install the package
 
Install the package
Line 43: Line 39:
  
 
''--enable-shared'': Enables the building of shared libraries.
 
''--enable-shared'': Enables the building of shared libraries.
 
''-fwrapv'': This flag is used to make it so that '''make test''' can find the python libraries and so that '''make install''' doesn't fail. Why this fixes the problem is unknown. According to GCC, ''-fwrapv'' "instructs the compiler to assume that signed arithmetic overflow of addition, subtraction and multiplication wraps around using twos-complement representation."
 
  
 
== Multilib ==
 
== Multilib ==
Line 53: Line 47:
  
 
  sed -i "s@/usr/X11R6@${XORG_PREFIX}@g" setup.py &&
 
  sed -i "s@/usr/X11R6@${XORG_PREFIX}@g" setup.py &&
patch -Np1 -i ../Python-{{Python-Version}}-gdbm-1.patch &&
 
 
  CC="gcc ${BUILD32}" CXX="g++ ${BUILD32}" ./configure --prefix=/usr \
 
  CC="gcc ${BUILD32}" CXX="g++ ${BUILD32}" ./configure --prefix=/usr \
 
     --enable-shared &&
 
     --enable-shared &&
  make EXTRA_CFLAGS="-fwrapv"
+
  make
  
 
Install the package
 
Install the package
Line 82: Line 75:
  
 
  sed -i "s@/usr/X11R6@${XORG_PREFIX}@g" setup.py &&
 
  sed -i "s@/usr/X11R6@${XORG_PREFIX}@g" setup.py &&
patch -Np1 -i ../Python-{{Python-Version}}-gdbm-1.patch &&
 
 
  CC="gcc ${BUILDN32}" CXX="g++ ${BUILDN32}" ./configure --prefix=/usr \
 
  CC="gcc ${BUILDN32}" CXX="g++ ${BUILDN32}" ./configure --prefix=/usr \
 
     --libdir=/usr/lib32 --enable-shared &&
 
     --libdir=/usr/lib32 --enable-shared &&
  make EXTRA_CFLAGS="-fwrapv"
+
  make
  
 
Install the package
 
Install the package
Line 111: Line 103:
  
 
  sed -i "s@/usr/X11R6@${XORG_PREFIX}@g" setup.py &&
 
  sed -i "s@/usr/X11R6@${XORG_PREFIX}@g" setup.py &&
patch -Np1 -i ../Python-{{Python-Version}}-gdbm-1.patch &&
 
 
  CC="gcc ${BUILD64}" CXX="g++ ${BUILD64}" ./configure --prefix=/usr \
 
  CC="gcc ${BUILD64}" CXX="g++ ${BUILD64}" ./configure --prefix=/usr \
 
     --libdir=/usr/lib64 --enable-shared &&
 
     --libdir=/usr/lib64 --enable-shared &&
  make EXTRA_CFLAGS="-fwrapv"
+
  make
  
 
Install the package
 
Install the package

Revision as of 00:04, 6 March 2009

Download Source: http://www.python.org/ftp/python/2.7.8/Python-2.7.8.tar.bz2
Required Patch (For Multilib): http://svn.cross-lfs.org/svn/repos/patches/Python/Python-2.7.8-multilib-1.patch

Introduction to Python

Python is a dynamic object-oriented programming language that can be used for many kinds of software development. It offers strong support for integration with other languages and tools, comes with extensive standard libraries, and can be learned in a few days. Many Python programmers report substantial productivity gains and feel the language encourages the development of higher quality, more maintainable code.

Project Homepage: http://www.python.org/

Dependencies

Optional

Non-Multilib

Caution.png

Note

If the test suite (make test) fails because it cannot find python's math library, then you will need to install python before you can run the tests.
Caution.png

Note

If the installation of python fails, rebuild python. It appears to be somewhat inconsistant with regards to whether it works or not. The -fwrapv flag used with make attempts to fixes this. If it still doesn't complete make install without failing, then use make -i install instead (-i tells make to ignore errors). It's less desirable, but it should work. The other option is to run make install twice. The second time around it locates the installed python libraries it needs for the installation and is able to complete it.

Compile the package:

sed -i "s@/usr/X11R6@${XORG_PREFIX}@g" setup.py &&
./configure --prefix=/usr --enable-shared &&
make

Install the package

make install

Command Explanations

--enable-shared: Enables the building of shared libraries.

Multilib

32Bit

Compile the package:

sed -i "s@/usr/X11R6@${XORG_PREFIX}@g" setup.py &&
CC="gcc ${BUILD32}" CXX="g++ ${BUILD32}" ./configure --prefix=/usr \
    --enable-shared &&
make

Install the package

make install &&
mv -v /usr/bin/python{,-32} &&
mv -v /usr/bin/python2.7{,-32} &&
mv -v /usr/include/python2.7/pyconfig{,-32}.h

N32

Change the libdir that Python is going to use to lib32:

patch -Np1 -i ../Python-2.7.8-multilib-1.patch
sed -i -e "s:@@MULTILIB_DIR@@:lib32:g" \
        Lib/distutils/command/install.py \
        Lib/distutils/sysconfig.py \
        Lib/site.py \
        Makefile.pre.in \
        Modules/Setup.dist \
        Modules/getpath.c \
        setup.py

Compile the package:

sed -i "s@/usr/X11R6@${XORG_PREFIX}@g" setup.py &&
CC="gcc ${BUILDN32}" CXX="g++ ${BUILDN32}" ./configure --prefix=/usr \
    --libdir=/usr/lib32 --enable-shared &&
make

Install the package

make install &&
mv -v /usr/bin/python{,-n32} &&
mv -v /usr/bin/python2.7{,-n32} &&
mv -v /usr/include/python2.7/pyconfig{,-n32}.h

64Bit

Change the libdir that Python is going to use to lib64:

patch -Np1 -i ../Python-2.7.8-multilib-1.patch
sed -i -e "s:@@MULTILIB_DIR@@:lib64:g" \
        Lib/distutils/command/install.py \
        Lib/distutils/sysconfig.py \
        Lib/site.py \
        Makefile.pre.in \
        Modules/Setup.dist \
        Modules/getpath.c \
        setup.py

Compile the package:

sed -i "s@/usr/X11R6@${XORG_PREFIX}@g" setup.py &&
CC="gcc ${BUILD64}" CXX="g++ ${BUILD64}" ./configure --prefix=/usr \
    --libdir=/usr/lib64 --enable-shared &&
make

Install the package

make install &&
mv -v /usr/bin/python{,-64} &&
mv -v /usr/bin/python2.7{,-64} &&
ln -sfv multiarch_wrapper /usr/bin/python &&
ln -sfv multiarch_wrapper /usr/bin/python2.7 &&
mv -v /usr/include/python2.7/pyconfig{,-64}.h

Creating a Stub Header (Multilib Only)

Creating a Generic Stub Header

cat > /usr/include/python2.7/pyconfig.h << "EOF"
/* pyconfig.h - Stub Header  */
#ifndef __STUB__PYCONFIG_H__
#define __STUB__PYCONFIG_H__

#if defined(__x86_64__) || \
    defined(__sparc64__) || \
    defined(__arch64__) || \
    defined(__powerpc64__) || \
    defined (__s390x__)
# include "pyconfig-64.h"
#else
# include "pyconfig-32.h"
#endif

#endif /* __STUB__PYCONFIG_H__ */
EOF

Creating a Stub Header For Mips

cat > /usr/include/python2.7/pyconfig.h << "EOF"
/* pyconfig.h - Stub Header  */
#ifndef __STUB__PYCONFIG_H__
#define __STUB__PYCONFIG_H__

#include <sgidefs.h>

#if (_MIPS_SIM == _ABIO32)
# include "pyconfig-32.h"
#elif (_MIPS_SIM == _ABIN32)
# include "pyconfig-n32.h"
#elif (_MIPS_SIM == _ABI64)
# include "pyconfig-64.h"
#endif

#endif /* __STUB__PYCONFIG_H__ */
EOF

Contents

Installed Programs: pydoc, python, python2.7, python-config, python2.7-config, smtpd.py, and (if Tk is installed) idle
Installed Libraries: libpython2.7.so and various modules in /usr/lib/lib-dynload
Installed Directories: /usr/include/python2.7, /usr/lib/python2.7

Short Descriptions

pydoc is a tool for reading python documentation.
python is an interpreted, interactive, object-oriented programming language.
python2.7 is a version-specific version of python.
python-config is a symlink to python2.7-config.
python2.7.8-config ???
smtpd.py is a Python implemention of the minimal SMTP protocol as defined in RFC 821.
idle is an Integrated DeveLopment Environment (IDLE) for Python. It's based on Tkinter, Python's bindings to the Tk widget set.
libpython2.7.so ???