
在无法访问互联网的内网环境,安装 Python 及相关依赖包是非常难受的,是比较折腾的,目前是需要执行一个 Python 脚本,是有 Python 环境,但脚本运行的 Python 第三方依赖包没有就会执行报错,只能从互联网上下载再拿到生产环境单独安装。这里用到下面四个包且有版本要求,正常情况下如果可以联网,则使 pip 命令直接下载安装,非常简单。
pip install "boto3>=1.26.0"# AWS/S3 相关boto3>=1.26.0botocore>=1.29.0# MySQL/数据库相关pymysql>=1.0.2DBUtils>=3.0.0默认 Linux 环境没有 pip 命令,我这里版本是 x86 Red Hat Enterprise Linux release 9.6 看是没有 pip 命令的,需要手动安装一下,但 Python 默认安装了,版本是 3.9.21。
[root@jieke-sdbdm ~]# cat /etc/redhat-releaseRed Hat Enterprise Linux release 9.6 (Plow)[root@jieke-sdbdm ~]# pythonPython 3.9.21 (main, Feb 10 2025, 00:00:00)[GCC 11.5.0 20240719 (Red Hat 11.5.0-5)] on linuxType "help", "copyright", "credits" or "license" for more information.>>> exit()[root@jieke-sdbdm ~]# pipbash: pip: command not found...Install package 'python3-pip' to provide command 'pip'? [N/y] y * Waiting in queue... * Loading list of packages....The following packages have to be installed: python3-pip-21.3.1-1.el9.noarch A tool for installing and managing Python3 packagesProceed with changes? [N/y] y[root@jieke-sdbdm ~]# which pip/usr/bin/pip[root@jieke-sdbdm ~]# pip3 --versionpip 21.3.1 from /usr/lib/python3.9/site-packages/pip (python 3.9)--或者单独配置好 yum 源进行安装dnf install python3-pip -yLinux 操作系统自带 Python 环境,如果自带的版本过低或者不是你要的版本,可以自行升级,参考《Linux 环境从 Python3.6 升级到 Python3.12》[1]。下图是 Python 官网的生命周期,仅供参考。

前面也说了,如果可以联网则直接使用 pip 命令来安装,如果环境不能访问互联网就比较麻烦,不过有些包 Linux yum 源也自带了,可以使用 yum 安装,比如 RHEL 9 的 AppStream 仓库中包含了 python3-boto3 包,可以直接用 dnf 安装,不需要 pip 和外网,但版本可能较旧。所以还是需要单独下载 wheel 离线包再拿到生产内网环境去安装。
# 创建存放 wheel 包的目录mkdir offline_pkgs# 下载 botocore、pymysql、DBUtils 及其所有依赖pip download boto3>=1.26.0 botocore>=1.29.0 pymysql>=1.0.2 DBUtils>=3.0.0 -d ./offline_pkgs如果使用上面的命令直接下载,则有两个问题,一是下载可能超时,因为第三方依赖包都在外网,国内下载比较慢容易超时,需要使用国内镜像源;另一个问题则是包版本问题,要么过高,无法在目标环境安装,需要指定 Python 版本下载。
造成版本不一致的原因可能就是能下载包的这个 Python 版本和目标机安装的 Python 版本不一致,比如下载的离线包 boto3-1.43.47 要求 Python ≥3.10,但目标系统是 Python 3.9.21,因此无法安装,所以需要下载一个兼容 Python 3.9 的 boto3 版本。
最后命令如下,需要下载指定范围版本的包,指定平台、指定版本、指定国内镜像下载。
pip download \"boto3>=1.26.0,<1.35" \"botocore>=1.29.0,<1.36" \"pymysql>=1.0.2" \"DBUtils>=3.0.0" \ --python-version 3.9 \ --platform manylinux2014_x86_64 \ --only-binary=:all: \ -d ~/offline_pkgs \ -i https://mirrors.aliyun.com/pypi/simple/ \ --trusted-host mirrors.aliyun.com \ --timeout 360 \ --retries 5-- 使用更稳定的镜像源pip3 download \"boto3>=1.26.0,<1.35" \"botocore>=1.29.0,<1.36" \"pymysql>=1.0.2" \"DBUtils>=3.0.0" \--python-version 3.9 \--platform manylinux2014_x86_64 \--only-binary=:all: \-d ~/offline_good \-i https://pypi.tuna.tsinghua.edu.cn/simple \--trusted-host pypi.tuna.tsinghua.edu.cn \--timeout 360 \--retries 5命令说明:
--python-version 3.9 确保只下载兼容 Python 3.9 的 wheel。--platform manylinux2014_x86_64 适配 RHEL 9 x86_64 系统。--only-binary=:all: 跨版本下载的强制要求,只下 wheel,不下源码包下载后的包如下:
[root@jiekexu ~]# cd offline_boto3_good/[root@jiekexu offline_boto3_good]# lltotal 12872-rw-r--r-- 1 root root 139174 Jul 14 18:03 boto3-1.34.162-py3-none-any.whl-rw-r--r-- 1 root root 12468049 Jul 14 18:03 botocore-1.34.162-py3-none-any.whl-rw-r--r-- 1 root root 32936 Jul 14 18:28 dbutils-3.1.2-py3-none-any.whl-rw-r--r-- 1 root root 20419 Jul 14 18:03 jmespath-1.1.0-py3-none-any.whl-rw-r--r-- 1 root root 45716 Jul 14 18:28 pymysql-1.2.0-py3-none-any.whl-rw-r--r-- 1 root root 229892 Jul 14 18:03 python_dateutil-2.9.0.post0-py2.py3-none-any.whl-rw-r--r-- 1 root root 83175 Jul 14 18:03 s3transfer-0.10.4-py3-none-any.whl-rw-r--r-- 1 root root 11050 Jul 14 18:03 six-1.17.0-py2.py3-none-any.whl-rw-r--r-- 1 root root 131584 Jul 14 18:03 urllib3-2.6.3-py3-none-any.whlWindows 环境下载如下:
C:\Users\JiekeXu>pip3 download "boto3>=1.26.0,<1.35" "botocore>=1.29.0,<1.36" "pymysql>=1.0.2" "DBUtils>=3.0.0" --python-version 3.9 --platform manylinux2014_x86_64 --only-binary=:all: -d ~/offline_boto3_good -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com --timeout 360 --retries 5Collecting six>=1.5 (from python-dateutil<3.0.0,>=2.1->botocore<1.36,>=1.29.0) Downloading https://mirrors.aliyun.com/pypi/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl (11 kB)Saved c:\users\JiekeXu\offline_boto3_good\boto3-1.34.162-py3-none-any.whlSaved c:\users\JiekeXu\offline_boto3_good\botocore-1.34.162-py3-none-any.whlSaved c:\users\JiekeXu\offline_boto3_good\pymysql-1.2.0-py3-none-any.whlSaved c:\users\JiekeXu\offline_boto3_good\dbutils-3.1.2-py3-none-any.whlSaved c:\users\jJiekeXu\offline_boto3_good\jmespath-1.1.0-py3-none-any.whlSaved c:\users\JiekeXu\offline_boto3_good\python_dateutil-2.9.0.post0-py2.py3-none-any.whlSaved c:\users\JiekeXu\offline_boto3_good\s3transfer-0.10.4-py3-none-any.whlSaved c:\users\JiekeXu\offline_boto3_good\urllib3-1.26.20-py2.py3-none-any.whlSaved c:\users\JiekeXu\offline_boto3_good\six-1.17.0-py2.py3-none-any.whlSuccessfully downloaded boto3 botocore pymysql DBUtils jmespath python-dateutil s3transfer urllib3 six
不要以 root 用户直接运行 pip 安装到系统,否则会破坏系统包管理器的权限体系。如果不确定目标环境 Python 的使用情况,建议使用 Python 虚拟环境。
# 创建虚拟环境(普通用户无需 sudo)python3 -m venv /home/doris/scripts/backup_env# 激活虚拟环境source /home/doris/scripts/backup_env/bin/activate# 在新虚拟环境中离线安装(此时不会受系统包干扰)# 离线安装 boto3包pip install --no-index --find-links=/home/doris/scripts/python_script/offline_pkgs boto3# 离线安装所有包pip install --no-index --find-links=/home/doris/scripts/python_script/offline_pkgs boto3 botocore pymysql dbutils
通过 Python 虚拟环境导入包进行版本验证。
[doris@jieke-sdbdm ~]$ source /home/doris/scripts/backup_env/bin/activate(backup_env) [doris@jieke-sdbdm ~]$ python -c "import boto3, pymysql, dbutilsprint('boto3:', boto3.__version__)print('botocore:', boto3.session.Session()._loader.__version__ if hasattr(boto3.session.Session()._loader, '__version__') else 'ok')print('pymysql:', pymysql.__version__)print('dbutils:', dbutils.__version__)"--输出如下boto3: 1.34.162botocore: okpymysql: 2.2.8dbutils: 3.1.2
作者:JiekeXu,江湖人称“强哥”,青学会MOP技术社区主席,荣获Oracle ACE Pro称号,OpenTenBase ACE,金仓社区最具价值倡导者KVA,崖山最具价值专家YVP,IvorySQL开源社区专家顾问委员会成员,KWDB社区MVP,墨天轮MVP,墨天轮连续多年度“墨力之星”,拥有Oracle OCP/OCM认证,MySQL 5.7/8.0 OCP认证以及金仓KCA、KCP、KCM、KCSM证书,TiDB PCTA/PCTP证书、PCA、OBCA、OGCA等众多国产数据库认证证书,专注于数据库技术、系统架构及大数据运维,致力于分享最纯粹、最接地气的 DBA 实战与前沿技术洞察。如果你也对数据技术充满热忱,欢迎关注我的微信公众号“JiekeXu DBA之路”点赞、转发与评论,支持一下,谢谢!
全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,一起学习共同进步~~~
欢迎关注我的微信公众号【JiekeXu DBA之路】,来一起学习新知识!
