最近遇到了一个场景: 需要将 Python 项目文件打包到无法联网的主机上部署执行, 本篇文章记录针对于该场景的处理方案.
说明:
源主机(可联网): 安装了 Python3 和 pip3
目标主机(无法联网): 需安装和源主机相同的 Python 版本和 pip3, 部署执行项目文件
主机系统为 CentOS,Python 版本为 3.5.2, 通过虚拟环境 + pip 进行迁移
目标主机离线安装 Python 及 pip3
源主机中下载所需包
Python3
首先, 下载 Python3, 可以在官网 https://www.python.org/downloads/source/ 或者通过源主机(可联网的其它主机)wget:
wget --no-check-certificate https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
Python3 依赖包
然后, 需要下载 Python3 的依赖包, 可以通过 CentOS 镜像中去 copy, 不过我更推荐用 yum 生成的方式:
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel epel-release gcc gcc-c++ xz-devel readline-devel gdbm-devel SQLite-devel tk-devel db4-devel libpcap-devel libffi-devel --downloadonly --downloaddir=/packages
命令执行完毕, 你就会在 / packages 目录下发现所需的所有. rpm 文件.
如果, 源主机中已经安装了这些依赖, 那么你可以用:
yum reinstall zlib-devel bzip2-devel openssl-devel ncurses-devel epel-release gcc gcc-c++ xz-devel readline-devel gdbm-devel SQLite-devel tk-devel db4-devel libpcap-devel libffi-devel --downloadonly --downloaddir=/packages
打包:
zip -r packages.zip packages/
目标主机中安装
将 Python-3.5.2.tgz 和 packages.zip 上传至目标主机.
首先, 安装 Python3 依赖:
- unzip packages.zip
- cd packages/
- rpm -Uvh *.rpm --nodeps --force
然后, 安装 Python3:
- tar -zxvf Python-3.5.2.tgz
- mkdir /usr/local/python3
- cd Python-3.5.2
- ./configure --prefix=/usr/local/python3 # 将 Python3 安装在 / usr/local/python3
- make && make install # 编译安装
- ln -s /usr/local/python3/bin/python3 /usr/bin/python3 # 创建 python3 软链接
- ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 # 创建 pip3 软链接
安装完毕, 可通过:
Python3 -V pip3 -V
查看并检查安装的版本
源主机中打包项目文件
若项目中创建虚拟环境, 首先激活虚环境, 然后进入项目文件, 执行:
pip3 freeze> requirements.txt
将当前项目中的库列表生成并保存在 requirements.txt 中.
然后, 通过 pip 生成批量离线安装包(whl 文件):
pip wheel --wheel-dir=./tmp/packages -r requirements.txt
执行完毕之后, 你会发现 / tmp/packages 中包含了项目所需的所有. whl
打包项目文件:
zip A.zip A/
目标主机中部署
上传 A.zip 至目标主机, 创建虚环境, 并激活(python3 自带了 venv):
- python3 -m venv test_venv
- cd test_venv
- source bin/activate
解压项目代码 A.zip, 并切换:
unzip A.zip cd A/
安装项目 Python 依赖模块:
pip3 install --no-index --find-links=tmp/packages -r requirements
安装完毕, 检查:
pip3 freeze
当然你也可以通过 python 命令行 import 进行检验哈哈.
最后, 执行项目启动脚本 (startup.sh) 部署:
- chmod +x ./startup.sh
- nohup ./startup.sh> a-log 2>&1 &
以上, 就完成了整个项目的迁移部署.
来源: https://www.cnblogs.com/ybjourney/p/12521070.html