由于客户环境断网且提供非 Root 权限用户,只能从头开始采用源码方式进行安装。而源码方式自然免不了对各种开发工具的依赖,好在对于 Yum 来说,提供一个了插件可以需要的依赖全部下载下来,在离线机器直接采用离线方式即可,免去了手动调整各种依赖的麻烦。
对于 Python 需要的依赖的包来说,本身 pip 也提供了类似 Yum 离线下载的工具,需要直接导入即可。
Linux 服务器发行版为:Centos7.6
内核版本为:Linux 3.10.0-957.el7.x86_64
Python:3.8.5
在选择可联网环境的机器时,建议选择相同版本的服务器。
主要过程如下:
- 在可联网服务器上,下载 Python 源码,及其所需依赖(Yum 开发依赖及 Python 模块依赖)。
- 上传至离线服务器上。
- 安装,编译 Python.
数据准备
在联网服务器上操作:
-
安装
centos-release-scl
第三方yum源yum install centos-release-scl
-
安装 yum 依赖下载插件
yum install yum-plugin-downloadonly
-
下载 Python 及 Yum 依赖
# 下载 python 源码 wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz # 下载依赖, python_dependencies 为保存的目标文件夹 yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel --downloadonly --downloaddir=python_dependencies
-
下载 Python 模块依赖
# 导出使用的依赖 pip freeze > requirements.txt # 建议在导出后,将 pip,wheel,setuptools 手动写入到 requirements 文件中。 # 下载, -d 为目标文件夹 pip download -d python_modules -r ipsla_requirements.txt
Python 离线安装
在离线服务器上操作:
-
离线安装 Yum 依赖(需 root)
rpm -Uvh --force --nodeps python_dependencies/*.rpm
-
启用高版本 GCC(为了在编译时执行
--enable-optimizations
, GCC 安装可参见 Gcc 安装)scl enable devtoolset-9 bash gcc -v
-
解压 Python 源码
tar -zxf Python-3.8.5.tgz -C /home/user/app/python
-
配置 make 文件, 指定可执行文件目录:
configure prefix=/home/user/app/python3 --enable-optimizations
-
执行编译:
make
-
执行安装
make install
-
进入到 /home/user/app/python3/bin 目录下,执行 python3 看是否成功
./python3 --version
-
配置环境变量,source 后生效:
vim ~/.bash_profile export PYTHON3_PATH=/home/ipsla/app/python3 export PATH=$PYTHON3_PATH/bin:$PATH
Python 依赖模块安装
由于离线 Python3.8 自带的 pip 等版本可能与联网服务器模块版本不一致,为了规避依赖版本问题,先对其版本进行更新:
ipsla_packages 为下载后的 Python 模块依赖目录。
/home/ipsla/user/python3/bin/pip3.8 --upgrade ipsla_packages/pip-20.2.3-py2.py3-none-any.whl
/home/ipsla/user/python3/bin/pip3.8 --upgrade ipsla_packages/wheel-0.35.1-py2.py3-none-any.whl
/home/ipsla/user/python3/bin/pip3.8 --upgrade ipsla_packages/setuptools-50.3.0-py3-none-any.whl
安装需要的依赖:
# 根据 requirements 文件安装
/home/user/app/python3/bin/pip3.8 install --no-index --find-links=ipsla_packages -r ipsla_packages/requirements.txt
# 手动指定安装
/home/user/app/python3/bin/pip3.8 install --no-index --find-links=ipsla_packages/ aiohttp==3.5.4
通常都会搭配 MySQL 等数据库,如果数据库也是离线安装的话,需要调整一下链接文件:
ln -s /home/user/mysql/lib/libmysqlclient.so.20 /usr/lib64/libmysqlclient.so.20
# libmysqlclient 可通过 find /home/user -name "libmysqlclient" 找到