Ubuntu下Python可导入库,但pip无法获取离线适配版本
版本信息
lsb_release -a Ubuntu: 20.04.5 Python3 --version Python 3.8.10 pip3 --version pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
代码情况
我有一个Python脚本,包含以下导入语句,执行python3 Program.py时可正常运行:
import gi gi.require_version('Gtk', '3.0') import subprocess import os.path import re import cairo import json import base64 from gi.repository import Gtk as gtk from gi.repository import Gdk as gdk from gi.repository import GdkPixBuf from gi.repository import GLib from gi.repository import Gio from dataclasses import dataclass from typing import List
问题与尝试操作
目标
我希望下载这些库,用于无网络访问的离线环境中运行程序。
尝试操作
... pip download subprocess ERROR: Could not find a version that satisfies the requirement gi (from versions: none) ERROR: No matching distribution found for gi pip3 download subprocess ERROR: Could not find a version that satisfies the requirement gi (from versions: none) ERROR: No matching distribution found for gi pip3 install gi ERROR: Could not find a version that satisfies the requirement gi (from versions: none) ERROR: No matching distribution found for gi ...
我按照教程和相关方案尝试使用pip下载,却持续收到“Could not find a version that satisfies the requirement gi”或针对其他库的类似错误。无论是通过requirements.txt文件还是单独的pip命令执行,都会出现该问题。
关于gi库,我在网上了解到它对应PyGObject以便在新版本Python中导入,但我不理解为何本地脚本能正常导入该库,却无法通过pip下载;同时subprocess等库也存在同样的问题,恳请提供解决方案。
解决方案
依赖分类说明
你的导入依赖分为三类,不同类型的依赖获取方式不同:
- Python标准库:
subprocess、os.path、re、json、base64、dataclasses、typing这些是Python 3.8自带的核心库,不需要通过pip或其他工具额外安装,只要离线环境安装的是Python 3.8.10,就能直接导入使用。 - 系统Debian/Ubuntu包:
gi(即PyGObject)及GTK相关组件(Gtk、Gdk等)是通过Ubuntu系统的apt包管理器安装的,不在PyPI源中,所以pip无法找到。本地能导入是因为Ubuntu默认通过apt预装了python3-gi包。 - PyPI可下载包:
cairo对应的Python绑定是pycairo,可以通过pip下载。
具体操作步骤
1. 处理PyPI包(pycairo)
在联网的Ubuntu 20.04环境下,执行以下命令下载离线包:
# 创建存储目录 mkdir ./offline_pip_pkgs # 下载pycairo及其依赖 pip3 download pycairo --dest ./offline_pip_pkgs
将offline_pip_pkgs目录复制到离线环境后,执行安装:
pip3 install --no-index --find-links ./offline_pip_pkgs pycairo
2. 处理系统包(gi及GTK相关依赖)
在联网的同版本Ubuntu 20.04机器上,下载所需的deb包:
# 创建存储目录 mkdir ./offline_deb_pkgs # 下载核心依赖包 sudo apt-get download python3-gi gir1.2-gtk-3.0 gir1.2-gdkpixbuf-2.0 gir1.2-glib-2.0 gir1.2-gio-2.0 # 移动到目标目录 mv *.deb ./offline_deb_pkgs
将offline_deb_pkgs目录复制到离线环境后,执行安装:
sudo dpkg -i ./offline_deb_pkgs/*.deb # 若出现依赖缺失,执行以下命令修复(需确保离线环境有本地依赖源,或提前下载所有缺失的依赖deb包) sudo apt-get -f install
3. 验证离线环境运行
完成上述安装后,在离线环境执行python3 Program.py即可正常运行脚本。
内容的提问来源于stack exchange,提问作者Tommy Sanger
相关产品推荐
相关产品推荐

