python依赖包导出离线安装到没有外网的服务器

导出依赖包名

本文详细介绍了在跨平台(如从 Windows 为 Linux 准备)或同平台环境下,管理 Python 项目依赖的完整流程。主要内容包括:

  1. 导出依赖包名 :使用 pipreqs 或 pip freeze 生成 requirements.txt 文件。
  2. 下载对应的安装包 :
    • 跨平台下载:在 Windows 上为 Linux 目标平台下载指定 Python 版本和 ABI 的 wheel 包。
    • 同平台下载 :直接使用 pip download 下载依赖包到本地目录。
  3. 安装依赖包 :
    • 安装到全局 Python 环境。
    • 安装到虚拟环境(venv),支持直接调用虚拟环境内的 pip 或先激活环境再安装。
  4. 后续操作:查看已安装的包,以及在 Linux 上使用指定虚拟环境的 Python 运行脚本。

通过上述步骤,可以实现依赖包的离线部署和环境一致性保证。

Python 脚本生成 requirements.txt

sh 复制代码
     pipreqs ./ --use-local --force

Python 项目中生成 requirements.txt

sh 复制代码
    pip freeze > requirements.txt

下载对应的安装包

1. 在 Windows 上下载 Linux 对应平台的 Python 依赖包

注意,先把文件 requirements.txt 里面的 Python 包的版本限定去除,让它自动选择版本,否则可能找不到依赖。

sh 复制代码
pip download -r requirements.txt -d packages --platform manylinux2014_x86_64 --python-version 39 --implementation cp --abi cp39 --only-binary=:all:
参数 含义 解释
download 下载包,不安装 只把依赖下载下来
-r requirements.txt 根据 requirements.txt 下载依赖 下载所有依赖及其子依赖
-d packages 下载到指定目录 所有 .whl 文件放到 packages/ 目录
--platform manylinux2014_x86_64 指定目标平台 下载适用于 Linux x86_64 的包,而不是 Windows 包
--python-version 39 指定 Python 版本 下载适用于 Python 3.9 的 wheel
--implementation cp 指定 Python 实现 cp = CPython(官方 Python)
--abi cp39 指定 ABI 下载与 CPython 3.9 ABI 对应的 wheel
--only-binary=:all: 只下载 wheel 不下载源码包(tar.gz)

2. 同平台系统下载 Python 依赖包

同平台、同版本,直接下载即可。

sh 复制代码
pip download -r requirements.txt -d packages

安装依赖包

1. 安装到全局环境

sh 复制代码
pip install --no-index --find-links=packages -r requirements.txt

2. 安装到虚拟环境venv

a. 直接运行虚拟环境的 pip 命令安装
sh 复制代码
/etc/python/venv/bin/pip install --no-index --find-links=packages -r requirements.txt
b. 安装到某个虚拟环境 (venv)
(1) 激活 venv
sh 复制代码
source /etc/zabbix-python/venv/bin/activate
(2) 安装 requirements.txt 中列出的依赖包
sh 复制代码
pip install --no-index --find-links=packages -r requirements.txt
查看已安装的包
sh 复制代码
pip list
pip show pymssql

Linux 运行 py 脚本

需要指定对应环境的 Python 来运行脚本

sh 复制代码
 /etc/python/venv/bin/python /etc/python/scripts/db_check/xxxx.py
相关推荐
小HANN2 分钟前
华为云企业网站上云实战|从零搭建高可用WordPress全站架构(ECS+RDS+ELB+弹性伸缩+云监控闭环)
linux·运维·服务器·经验分享
蚰蜒螟21 分钟前
从内核启动到 Java NIO:一次 socket accept 的源码串联之旅
java·python·nio
学逆向的36 分钟前
C 突破编译器限制
c语言·开发语言·网络安全
jimy11 小时前
C++ 虚函数表:基类和派生类共用一张 vtable 吗?
开发语言·c++
高洁011 小时前
AI赋能产业升级与中美未来经济赛道博弈
人工智能·python·深度学习·机器学习·transformer
爱吃提升1 小时前
Dev-C++ 5.11 C++断点调试完整教程
开发语言·c++
夜晚回家1 小时前
Python 原始字符串详解 | r 前缀到底让什么不再转义
开发语言·python
陈年老古董1 小时前
PyQt5 入门指南:环境搭建、PyCharm 外部工具配置与登录界面实战
开发语言·qt·pycharm
看浪的路人1 小时前
第7讲:大模型后端服务化——Go 实现高并发 LLM Proxy / Router / Fallback
开发语言·后端·golang
祖力551 小时前
驱动工程搭建与字符设备驱动框架
linux·运维·服务器·内核·arm·imx6ull·驱动