python 2.7 自定义 RPM 编译[备忘]

简介: 要求 把 python 2.7 进行编译 安装目标位置 可执行文件位置   /apps/svr/python27 其他库文件, 头文件, doc 安装位置  /apps/lib/python27 对应源码 python-2.7.5.tar.gz   参见  python-2.7_centOS5.8.spec 文件 %define _topdir %(echo `cd ..

要求

把 python 2.7 进行编译

安装目标位置

可执行文件位置   /apps/svr/python27

其他库文件, 头文件, doc 安装位置  /apps/lib/python27

对应源码 python-2.7.5.tar.gz

 

参见  python-2.7_centOS5.8.spec 文件

%define _topdir %(echo `cd ..; pwd`)
%define binsuffix 27
%define pybasever 2.7
%define version 2.7.5
%define name python
%define release 20140124vipclound.centOS58
############# edit by terry ############
%define _prefix                 /apps
%define _exec-prefix            /apps
%define _bindir                 /apps/svr/python27
%define _sbindir                /apps/svr/python27
%define _sysconfdir             /apps/conf
%define _includedir             /apps/lib
%define _libexecdir             /apps/lib
%define _infodir                /apps/lib
%define _oldincludedir          /apps/lib
%define _libdir                 /apps/lib
%define _defaultdocdir          /apps/lib

%define config_include_docs no

############# edit by terry ############

Name: %{name}%{binsuffix}
Version: %{version}
Release: 20140121.vipclound.el5
Summary: An interpreted, interactive, object-oriented programming language.
Group: Development/Languages
Source0: http://www.python.org/ftp/python/%{version}/Python-%{version}.tar.bz2


License: PSF
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)


AutoReq: no
Provides: python(abi) = %{pybasever}


BuildRequires: autoconf
BuildRequires: bzip2
BuildRequires: bzip2-devel
BuildRequires: db4-devel
BuildRequires: expat-devel
BuildRequires: findutils
BuildRequires: gcc-c++
BuildRequires: glibc-devel
BuildRequires: make
BuildRequires: openssl-devel
BuildRequires: pkgconfig
BuildRequires: readline-devel
BuildRequires: sqlite-devel
BuildRequires: tar
BuildRequires: zlib-devel


%description
Python is an interpreted, interactive, object-oriented programming
language.  It incorporates modules, exceptions, dynamic typing, very high
level dynamic data types, and classes. Python combines remarkable power
with very clear syntax. It has interfaces to many system calls and
libraries, as well as to various window systems, and is extensible in C or
C++. It is also usable as an extension language for applications that need
a programmable interface.  Finally, Python is portable: it runs on many
brands of UNIX, on PCs under Windows, MS-DOS, and OS/2, and on the
Mac.


%package devel
Summary: The libraries and header files needed for Python extension development.
Requires: %{name} = %{version}-%{release}
Group: Development/Libraries


%description devel
The Python programming language's interpreter can be extended with
dynamically loaded extensions and can be embedded in other programs.
This package contains the header files and libraries needed to do
these types of tasks.


Install python-devel if you want to develop Python extensions.  The
python package will also need to be installed.  You'll probably also
want to install the python-docs package, which contains Python
documentation.


%prep
%setup -n Python-%{version}



%build
%configure \
        --enable-ipv6 \
        --enable-unicode=ucs4 \
        --enable-shared \
        --with-system-ffi \
        --with-system-expat \

%{__make} %{?_smp_mflags}




%install
[ -d $RPM_BUILD_ROOT ] && rm -fr $RPM_BUILD_ROOT


%{__make} altinstall DESTDIR=$RPM_BUILD_ROOT
%{__rm} -f $RPM_BUILD_ROOT%{_prefix}/bin/python{,2}
%{__rm} -f $RPM_BUILD_ROOT%{_prefix}/bin/python{,2}-config
%{__rm} -f $RPM_BUILD_ROOT%{_prefix}/bin/2to3
%{__rm} -f $RPM_BUILD_ROOT%{_prefix}/bin/idle
%{__rm} -f $RPM_BUILD_ROOT%{_prefix}/bin/pydoc
%{__rm} -f $RPM_BUILD_ROOT%{_prefix}/bin/smtpd.py
%{__rm} -rf $RPM_BUILD_ROOT%{_libdir}/pkgconfig/
%{__ln_s} %{_libdir}/python2.7/config $RPM_BUILD_ROOT%{_prefix}/lib/python2.7/config
%{__ln_s} %{_libdir}/python2.7/lib-dynload $RPM_BUILD_ROOT%{_prefix}/lib/python2.7/lib-dynload


# 创建对应 ldconfig 库配置文件
mkdir -p $RPM_BUILD_ROOT/apps/conf/python27
touch $RPM_BUILD_ROOT/apps/conf/python27/python27.conf
echo "/apps/lib/" > $RPM_BUILD_ROOT/apps/conf/python27/python27.conf
echo "/apps/lib/python2.7/" > $RPM_BUILD_ROOT/apps/conf/python27/python27.conf



# 手动创建 man file 否则无法创建 RPM
gzip -c $RPM_BUILD_ROOT/%{_libdir}/man1/python2.7.1 >> $RPM_BUILD_ROOT/%{_libdir}/man1/python2.7.1.gz

######
# POST
######

%post
# 移动对应库文件
mv /apps/lib/libpython2.7.so.1.0 /apps/lib/python2.7/.
ln -s  /apps/lib/python2.7/libpython2.7.so.1.0 /apps/lib/python2.7/libpython2.7.so

# 删除库文件(已备份) 删除 MAN FILE
rm -rf %{_libdir}/libpython2.7.so.1.0
rm -rf %{_libdir}/libpython2.7.so
rm -rf /%{_libdir}/man1

mkdir /apps/svr/python -p

ln -s /apps/svr/python27/python2.7 /apps/svr/python/python


%postun
rm -rf /apps/lib/python2.7/libpython2.7.so.1.0 /apps/lib/python2.7/libpython2.7.so
rm -rf /apps/svr/python/python

%post  devel
# 移动头文件
mv /apps/include/python2.7/pyconfig.h /apps/lib/python2.7/.

total=`ls /apps/include/ | wc -l`
if [ $total -eq 1 ]
then
   rm -rf /apps/include
fi

%postun devel
rm -rf /apps/lib/python2.7/pyconfig.h



%clean
%{__rm} -rf $RPM_BUILD_ROOT




%files
%defattr(-,root,root,-)
%{_prefix}/lib/python2.7/*
%{_libdir}/python2.7/lib-dynload/*
%{_libdir}/libpython2.7.so*
%{_bindir}/python2.7*
# %{_mandir}/man1/python2.7.1
%{_bindir}/2to3
%{_bindir}/idle
%{_bindir}/pydoc
%{_bindir}/smtpd.py
%{_mandir}/man1/python2.7.1
%config(noreplace) /apps/conf/python27/python27.conf

#   /apps/svr/python27/2to3
#   /apps/svr/python27/idle
#   /apps/svr/python27/pydoc
#   /apps/svr/python27/smtpd.py


%doc
%{_mandir}/man1/python2.7.1.gz


%files devel
%defattr(-,root,root,-)
%{_prefix}/include/python2.7/*
%{_libdir}/python2.7/config/*


%changelog
* Mon Jan 21 2014 Terry Tsang <signmem@hotmail.com> - 2.7.5-1
- Initial RPM release

 

python-2.7_centOS5.8.spec 存放位置 /usr/src/redhat/SPECS/

python-2.7.5.tar.gz 存放位置 /usr/src/redhat/SOURCES/


 

编译方法

rpm -bb python-2.7_centOS5.8.spec


 

 


参见 python-2.7_centOS6.5.spec 文件

%define _topdir %(echo `cd ..; pwd`)
%define binsuffix 27
%define pybasever 2.7
%define version 2.7.5
%define name python
%define release 20140124vipclound.centOS65

############# edit by terry ############
%define _prefix                 /apps
%define _exec-prefix            /apps
%define _bindir                 /apps/svr/python27
%define _sbindir                /apps/svr/python27
%define _sysconfdir             /apps/conf
%define _includedir             /apps/lib
%define _libexecdir             /apps/lib
%define _infodir                /apps/lib
%define _oldincludedir          /apps/lib
%define _libdir                 /apps/lib
%define _defaultdocdir          /apps/lib
#%define _mandir                /apps/lib

%define config_include_docs no

############# edit by terry ############

Name: %{name}%{binsuffix}
Version: %{version}
Release: 20140121.vipclound.el6
Summary: An interpreted, interactive, object-oriented programming language.
Group: Development/Languages
Source0: http://www.python.org/ftp/python/%{version}/Python-%{version}.tar.bz2


License: PSF
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)


AutoReq: no
Provides: python(abi) = %{pybasever}


BuildRequires: autoconf
BuildRequires: bzip2
BuildRequires: bzip2-devel
BuildRequires: db4-devel
BuildRequires: expat-devel
BuildRequires: findutils
BuildRequires: gcc-c++
BuildRequires: glibc-devel
# BuildRequires: gmp-devel
# BuildRequires: libffi-devel
# BuildRequires: libGL-devel
# BuildRequires: libX11-devel
BuildRequires: make
# BuildRequires: ncurses-devel
BuildRequires: openssl-devel
BuildRequires: pkgconfig
BuildRequires: readline-devel
BuildRequires: sqlite-devel
BuildRequires: tar
# BuildRequires: tcl-devel
# BuildRequires: tix-devel
# BuildRequires: tk-devel
BuildRequires: zlib-devel


%description
Python is an interpreted, interactive, object-oriented programming
language.  It incorporates modules, exceptions, dynamic typing, very high
level dynamic data types, and classes. Python combines remarkable power
with very clear syntax. It has interfaces to many system calls and
libraries, as well as to various window systems, and is extensible in C or
C++. It is also usable as an extension language for applications that need
a programmable interface.  Finally, Python is portable: it runs on many
brands of UNIX, on PCs under Windows, MS-DOS, and OS/2, and on the
Mac.


%package devel
Summary: The libraries and header files needed for Python extension development.
Requires: %{name} = %{version}-%{release}
Group: Development/Libraries


%description devel
The Python programming language's interpreter can be extended with
dynamically loaded extensions and can be embedded in other programs.
This package contains the header files and libraries needed to do
these types of tasks.


Install python-devel if you want to develop Python extensions.  The
python package will also need to be installed.  You'll probably also
want to install the python-docs package, which contains Python
documentation.


%prep
%setup -n Python-%{version}



%build
%configure \
        --enable-ipv6 \
        --enable-unicode=ucs4 \
        --enable-shared \
        --with-system-ffi \
        --with-system-expat \

%{__make} %{?_smp_mflags}


%install
[ -d $RPM_BUILD_ROOT ] && rm -fr $RPM_BUILD_ROOT


%{__make} altinstall DESTDIR=$RPM_BUILD_ROOT
%{__rm} -f $RPM_BUILD_ROOT%{_prefix}/bin/python{,2}
%{__rm} -f $RPM_BUILD_ROOT%{_prefix}/bin/python{,2}-config
%{__rm} -f $RPM_BUILD_ROOT%{_prefix}/bin/2to3
%{__rm} -f $RPM_BUILD_ROOT%{_prefix}/bin/idle
%{__rm} -f $RPM_BUILD_ROOT%{_prefix}/bin/pydoc
%{__rm} -f $RPM_BUILD_ROOT%{_prefix}/bin/smtpd.py
%{__rm} -rf $RPM_BUILD_ROOT%{_libdir}/pkgconfig/
%{__ln_s} %{_libdir}/python2.7/config $RPM_BUILD_ROOT%{_prefix}/lib/python2.7/config
%{__ln_s} %{_libdir}/python2.7/lib-dynload $RPM_BUILD_ROOT%{_prefix}/lib/python2.7/lib-dynload


# 创建对应 ldconfig 库配置文件
mkdir -p $RPM_BUILD_ROOT/apps/conf/python27
touch $RPM_BUILD_ROOT/apps/conf/python27/python27.conf
echo "/apps/lib/" > $RPM_BUILD_ROOT/apps/conf/python27/python27.conf
echo "/apps/lib/python2.7/" > $RPM_BUILD_ROOT/apps/conf/python27/python27.conf



# 手动创建 man file 否则无法创建 RPM
gzip -c $RPM_BUILD_ROOT/%{_libdir}/man1/python2.7.1 >> $RPM_BUILD_ROOT/%{_libdir}/man1/python2.7.1.gz

######
# POST
######

%post
# 移动对应库文件
mv /apps/lib/libpython2.7.so.1.0 /apps/lib/python2.7/.
ln -s  /apps/lib/python2.7/libpython2.7.so.1.0 /apps/lib/python2.7/libpython2.7.so

# 删除库文件(已备份) 删除 MAN FILE
rm -rf %{_libdir}/libpython2.7.so.1.0
rm -rf %{_libdir}/libpython2.7.so
rm -rf /%{_libdir}/man1

mkdir /apps/svr/python -p

ln -s /apps/svr/python27/python2.7 /apps/svr/python/python


%postun
rm -rf /apps/lib/python2.7/libpython2.7.so.1.0 /apps/lib/python2.7/libpython2.7.so
rm -rf /apps/svr/python/python

%post  devel
# 移动头文件
mv /apps/include/python2.7/pyconfig.h /apps/lib/python2.7/.

total=`ls /apps/include/ | wc -l`
if [ $total -eq 1 ]
then
   rm -rf /apps/include
fi

%postun devel
rm -rf /apps/lib/python2.7/pyconfig.h



%clean
%{__rm} -rf $RPM_BUILD_ROOT




%files
%defattr(-,root,root,-)
%{_prefix}/lib/python2.7/*
%{_libdir}/python2.7/lib-dynload/*
%{_libdir}/libpython2.7.so*
%{_bindir}/python2.7*
# %{_mandir}/man1/python2.7.1
%{_bindir}/2to3
%{_bindir}/idle
%{_bindir}/pydoc
%{_bindir}/smtpd.py
%{_mandir}/man1/python2.7.1
%{_bindir}/smtpd.pyc
%{_bindir}/smtpd.pyo
%config(noreplace) /apps/conf/python27/python27.conf

#   /apps/svr/python27/2to3
#   /apps/svr/python27/idle
#   /apps/svr/python27/pydoc
#   /apps/svr/python27/smtpd.py


%doc
%{_mandir}/man1/python2.7.1.gz


%files devel
%defattr(-,root,root,-)
%{_prefix}/include/python2.7/*
%{_libdir}/python2.7/config/*


%changelog
* Mon Jan 21 2014 Terry Tsang <signmem@hotmail.com> - 2.7.5-1
- Initial RPM release


 

python-2.7_centOS65.spec 存放位置 /root/rpmbuild/SPECS/

python-2.7.5.tar.gz 存放位置 /root/rpmbuild/SOURCES/


 

编译方法

rpm -bb python-2.7_centOS65.spec

目录
相关文章
|
3月前
|
Python
探索Python中的魔法方法:打造你自己的自定义对象
【8月更文挑战第29天】在Python的世界里,魔法方法如同神秘的咒语,它们赋予了对象超常的能力。本文将带你一探究竟,学习如何通过魔法方法来定制你的对象行为,让你的代码更具魔力。
42 5
|
1月前
|
Rust 监控 编译器
解密 Python 如何调用 Rust 编译生成的动态链接库(一)
解密 Python 如何调用 Rust 编译生成的动态链接库(一)
35 2
|
1月前
|
Rust 安全 Python
解密 Python 如何调用 Rust 编译生成的动态链接库(二)
解密 Python 如何调用 Rust 编译生成的动态链接库(二)
27 1
|
2月前
|
jenkins 持续交付 Docker
docker之自定义制作镜像(python程序)
docker之自定义制作镜像(python程序)
|
2月前
|
Linux UED iOS开发
Python中的自定义进度条:从零开始
Python中的自定义进度条:从零开始
|
30天前
|
程序员 开发者 Python
深度解析Python中的元编程:从装饰器到自定义类创建工具
【10月更文挑战第5天】在现代软件开发中,元编程是一种高级技术,它允许程序员编写能够生成或修改其他程序的代码。这使得开发者可以更灵活地控制和扩展他们的应用逻辑。Python作为一种动态类型语言,提供了丰富的元编程特性,如装饰器、元类以及动态函数和类的创建等。本文将深入探讨这些特性,并通过具体的代码示例来展示如何有效地利用它们。
32 0
|
1月前
|
存储 自然语言处理 编译器
Python 源文件编译之后会得到什么,它的结构是怎样的?和字节码又有什么联系?
Python 源文件编译之后会得到什么,它的结构是怎样的?和字节码又有什么联系?
41 0
|
3月前
|
前端开发 Python
使用Python+openpyxl实现导出自定义样式的Excel文件
本文介绍了如何使用Python的openpyxl库导出具有自定义样式的Excel文件,包括设置字体、对齐方式、行列宽高、边框和填充等样式,并提供了完整的示例代码和运行效果截图。
110 1
使用Python+openpyxl实现导出自定义样式的Excel文件
|
3月前
|
自然语言处理 安全 编译器
Python 中的编译和链接过程
【8月更文挑战第29天】
43 6
|
3月前
|
移动开发 Java 编译器
什么是pyc文件,把python的py文件编译成pyc文件,把pyc文件反编译成py文件。以及python编译的如何设置不生成pyc文件
什么是pyc文件,把python的py文件编译成pyc文件,把pyc文件反编译成py文件。以及python编译的如何设置不生成pyc文件
48 1

热门文章

最新文章