为什么要打包

公司有个远古项目, 用到的是 fabric1.x, 只支持 python2 版本, 并且对环境要求比较苛刻, 而且代码已经无人维护, 这种情况下将包固定下来, 保证代码可以运行

安装 pyenv 环境

pyenv 官网 https://github.com/pyenv/pyenv,pyenv 和其他的虚拟环境不同之处在于它可以安装任意版本的 python 环境(源码编译)
所以需要安装编译 python 的环境。

1
2
yum install -y git zlib zlib-devel libffi-devel openssl openssl-devel readline-devel bzip2-devel sqlite-devel
curl https://pyenv.run | bash

创建虚拟环境

安装 python2.7.18 的虚拟环境, 此环境只给 fabric 用, 所以就没有添加到环境变量, 以免影响其他 python 程序

1
2
3
yum install sqlite-devel bzip2-devel readline-devel

/root/.pyenv/bin/pyenv install 2.7.18

使用虚拟环境安装需要的包

1
/root/.pyenv/versions/2.7.18/bin/pip install fabric==1.14.1

安装完成后在 /root/.pyenv/versions/2.7.18/bin 看到了 fab 可执行程序

创建软链接

1
ln -sf /root/.pyenv/versions/2.7.18/bin/fab /usr/local/bin/fab

这样 fab 的环境就准备好了, 后面只需要把 /root/.pyenv 打包分发给其他机器
其实还可以使用 pyinstaller 打包, 不过我感觉没啥必要了.