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 编译

  1. 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
    
  2. 编译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
    
  3. 修改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
    
  4. 初始化 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