Python2.7.13静态编译环境
背景
本文并非是纯粹的python编译升级,而是为了在最新版本的python环境下通过pyinstaller将py程序打包,具体的需求环境如下
- Glibc 版本低于 2.13
- python 2.7.13
- virtualenv 1.7.1.2
- Pillow 4.1.0
- Pycurl 7.43.0
- Pycrypto 2.6.1
- Pyinstaller 3.2.1
讨论
-
glibc 低于 2.13
参考 《OS Glibc 版本》,可知当前的发行版除了 Debian 7.x, 就是 Centos 6.x 能满足。考虑到Centos系统依赖的 python 只有2.6.6, 如果直接升级为 2.7.13 就算编译成功,在使用pyinstaller编译py脚本的时候也会出现一些难以定位的问题(比如出现 编译后的文件为100Mb +)
本文选择了 Debian 7.11 作为OS 环境。如果你是Centos 6.x 用户,那么这篇文档仅供参考。
-
Python 2.7.11
为了避免与系统自带的python冲突,不覆盖原有的python环境,通过 prefix 指定安装路径到
/etc/python2.7.13
-
Pyinstaller, Pillow, Pycurl, Pycrypto
这些对系统都存在不同程度的依赖,Pyinstaller需要 python 开发库,Pillow需要tiff 等图像库,Pycurl需要 curl-config 支持。
环境部署
Python 编译
-
Gcc等工具安装
aptitude update aptitude install gcc g++ checkinstall -y aptitude install libsslcommon2 libssl1.0.0 libsslcommon2-dev libssl-dev openssl-dev -y aptitude install libbz2-1.0 libbz2-dev libreadline-dev libreadline6-dev -y
-
编译python
mkdir /etc/python2.7.13 mkdir /etc/python2.7.13/{lib,bin} mkdir /etc/python2.7.13/lib/{python2.7,pkgconfig} mkdir /etc/python2.7.13/lib/python2.7/config cp /tmp wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz && \ tar zxvf Python-2.7.13.tgz && cd Python-*/ ./configure --enable-shared \ --enable-optimizations \ --enable-unicode \ --enable-big-digits\ --prefix=/etc/python2.7.13 make && make install
-
修改Python 开发lib (python-dev)
[ -f /usr/lib/libpython2.7.so.1.0 ] && mv /usr/lib/libpython2.7.so.1.0 /usr/lib/libpython2.7.so.1.0.old ln -s /etc/python2.7.13/lib/libpython2.7.so.1.0 /usr/lib/libpython2.7.so.1.0
-
初始化 Pip
wget https://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py /etc/python2.7.13/bin/python /tmp/get-pip.py
virtualenv, Pyinstaller, Pillow, Pycurl 部署
-
virtualenv
aptitude install python-virtualenv virtualenvwrapper -y mkdir ~/env-2.7.13 virtualenv -p /etc/python2.7.13/bin/python ~/env-2.7.13 [ -f ~/env-2.7.13/bin/activate ] && source ~/env-2.7.13/bin/activate \ || echo "simuenv lost" pip install appdirs --upgrade pip install six --upgrade pip install packaging --upgrade pip install distribute --upgrade
-
Pillow
aptitude install libjpeg-dev zlib1g-dev libpng12-dev -y aptitude install libgeotiff-dev libtiff-opengl libgeotiff2 libtiff-dev -y aptitude install openjpeg openjpeg-dev aptitude install libopenjpeg-dev libopenjpeg2-dbg libopenjpeg2 libopenjpeg-dev openjpeg-tools -y # ln -s /usr/lib/i386-linux-gnu/libjpeg.so /usr/lib/libjpeg.so pip install pillow
-
Pycurl
aptitude install libcurl4-gnutls-dev pip install pycurl
-
Others
pip install pycrypto pip install pyinstaller