暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python 第三方库在内网环境下的下载与安装配置

113

大家好,我是 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之路”点赞、转发与评论,谢谢!

前 言

在无法访问互联网的内网环境,安装 Python 及相关依赖包是非常难受的,是比较折腾的,目前是需要执行一个 Python 脚本,是有 Python 环境,但脚本运行的 Python 第三方依赖包没有就会执行报错,只能从互联网上下载再拿到生产环境单独安装。这里用到下面四个包且有版本要求,正常情况下如果可以联网,则使用 pip 命令直接下载安装,非常简单。

pip install "boto3>=1.26.0"

# AWS/S3 相关
boto3>=1.26.0
botocore>=1.29.0
# MySQL/数据库相关
pymysql>=1.0.2
DBUtils>=3.0.0

Python 环境配置安装

pip 命令安装

默认 Linux 环境没有 pip 命令,我这里版本是 x86 Red Hat Enterprise Linux release 9.6 看是没有 pip 命令的,需要手动安装一下,但 Python 默认安装了,版本是 3.9.21。

[root@jieke-sdbdm ~]# cat /etc/redhat-release Red Hat Enterprise Linux release 9.6 (Plow) [root@jieke-sdbdm ~]# python Python 3.9.21 (main, Feb 10 2025, 00:00:00) [GCC 11.5.0 20240719 (Red Hat 11.5.0-5)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> exit() [root@jieke-sdbdm ~]# pip bash: 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 packages Proceed with changes? [N/y] y [root@jieke-sdbdm ~]# which pip /usr/bin/pip [root@jieke-sdbdm ~]# pip3 --version pip 21.3.1 from /usr/lib/python3.9/site-packages/pip (python 3.9) --或者单独配置好 yum 源进行安装 dnf install python3-pip -y

Python 环境安装

Linux 操作系统自带 Python 环境,如果自带的版本过低或者不是你要的版本,可以自行升级,参考《Linux 环境从 Python3.6 升级到 Python3.12》。下图是 Python 官网的生命周期,仅供参考。

图片.png

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]# ll total 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.whl

Windows 环境下载如下:

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 5 Collecting 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.whl Saved c:\users\JiekeXu\offline_boto3_good\botocore-1.34.162-py3-none-any.whl Saved c:\users\JiekeXu\offline_boto3_good\pymysql-1.2.0-py3-none-any.whl Saved c:\users\JiekeXu\offline_boto3_good\dbutils-3.1.2-py3-none-any.whl Saved c:\users\jJiekeXu\offline_boto3_good\jmespath-1.1.0-py3-none-any.whl Saved c:\users\JiekeXu\offline_boto3_good\python_dateutil-2.9.0.post0-py2.py3-none-any.whl Saved c:\users\JiekeXu\offline_boto3_good\s3transfer-0.10.4-py3-none-any.whl Saved c:\users\JiekeXu\offline_boto3_good\urllib3-1.26.20-py2.py3-none-any.whl Saved c:\users\JiekeXu\offline_boto3_good\six-1.17.0-py2.py3-none-any.whl Successfully downloaded boto3 botocore pymysql DBUtils jmespath python-dateutil s3transfer urllib3 six

图片.png

Python 第三方依赖包安装

不要以 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

图片.png

验证安装版本

通过 Python 虚拟环境导入包进行版本验证。

[doris@jieke-sdbdm ~]$ source /home/doris/scripts/backup_env/bin/activate

(backup_env) [doris@jieke-sdbdm ~]$ python -c "
import boto3, pymysql, dbutils
print('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.162
botocore: ok
pymysql: 2.2.8
dbutils: 3.1.2

图片.png

全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
——————————————————————————

facebook_pro_light_1920 × 1080  副本.png

最后修改时间:2026-07-20 23:07:07
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论