Python可执行打包

由于不同项目使用到不同版本的Python, 到新服务器部署的时候还需要安装环境,在没有用容器前,都显得格外痛苦。
因此就需要打包Python项目实现任意环境无依赖部署。

这里使用到的工具叫Pyinstaller,这里是基于Python3.8测试,理论上Python2也可以实现

1. 前置条件

1.1 已安装Python且编译时有设置–enable-shared

如果没有–enable-shared,在打包时就会报错,可以通过重新编译时加上

./configure --with-openssl=/usr --enable-shared --prefix=/usr && make && make install

当然如果是在构建机器,建议使用Pyenv,由于内网git不同,所以需要自行下载

# git clone https://github.com/pyenv/pyenv.git ~/.pyenv
unzip pyenv.zip
echo "export PYTHON_CONFIGURE_OPTS=--enable-shared" >> /etc/profile
source /etc/profile
mv pyenv-master .pyenv
echo 'export PATH=~/.pyenv/bin:PATH' >> ~/.bashrc
echo 'export PYENV_ROOT=~/.pyenv' >> ~/.bashrc
echo 'eval "(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc

这里好像source并不生效,如果执行pyenv显示不存在,则重新
“`source ~/.bashrc“`, 还有“`env | grep PYTHON_CONFIGURE_OPTS“`一下看看环境是否成功失效
然后就可以使用

pyenv install 3.8.5
pyenv global 3.8.5

任意的切换使用python了,注意一定要切换

1.2 安装项目需要的包

# 到自己项目进行python -m freeze > requirement.txt dump一下依赖包
# 安装项目的包
pip3 install -r requirement.txt --index-url https://mirrors.cloud.tencent.com/pypi/simple/  --extra-index-url https://mirrors.tencent.com/repository/pypi/tencent_pypi/simple/
pip3 install pyinstaller --index-url https://mirrors.cloud.tencent.com/pypi/simple/

2. 使用

pyinstaller --onefile --clean YOUR_PYTHON_FILE.py   --- 打包为一整个文件
或者
pyinstaller --clean YOUR_PYTHON_FILE.py             --- 打包为文件夹

注意:这里打包成一整个文件时,执行会出现2个进程,这是因为需要父进程去构建一个虚拟的Python环境,然后在环境中执行真正的程序

打包后的可执行文件在dist文件夹中,只要权限有x,则可以直接
“`./EXEC_FILE“`执行文件

KAI Python, 编程语言