程序要求 Python 3.12,而 openEuler 自带的版本不同,怎样在保留系统 Python 的前提下运行它?可以用 uv 安装所需解释器,再为程序创建独立环境。无论程序需要比系统更新还是更旧的版本,都可以采用这个方法。
本文以 Python 3.12 为例。请先查看程序的安装说明,将命令中的版本换成它支持的版本;不是所有程序都适合直接使用最新 Python。以下操作在普通用户下进行。
下面先走通安装与运行过程,再处理 pip 用法、下载缓慢和镜像设置。如果程序已经提供了 Conda 环境文件,可以先看文末的工具选择说明。
1. 确认环境,安装 uv
先看看当前 Python 和 uv 是否已经可用:
python3 --version
uv --version
如果 uv 已能正常运行,跳过安装。若提示找不到命令,但你曾安装过它,先按安装时的提示重新打开终端,确认 PATH,而不是重复安装。
尚未安装时,使用 uv 官方安装命令。如果系统没有 curl,先用 sudo dnf install curl 安装;uv 本身按用户安装,无需 sudo:
curl -LsSf https://astral.sh/uv/install.sh | sh
安装完成后按提示重新打开终端,或在当前 Bash 中执行:
source "$HOME/.local/bin/env"
uv --version
安装 uv 或随后下载 Python 较慢时,见后面的“下载慢或失败,应该改哪里”。
2. 安装程序需要的 Python
uv python install 3.12
uv 会下载相应平台的 Python。写 3.12 会选择 uv 当前支持的该系列补丁版本;程序明确要求某个补丁版本时,也可以写完整版本号。需要其他系列,例如 3.10,同样替换版本参数即可。
这一步没有替换 openEuler 的 /usr/bin/python3,也不要求把新的 Python 设成全局默认。系统工具继续使用发行版提供的解释器,应用在下一步选择自己的解释器。
3. 为程序创建环境并运行
进入已下载的程序目录。假设它用 requirements.txt 列出依赖,以 main.py 为入口。将下面的目录和入口文件替换成实际值,依赖和启动方式以该程序的说明为准。
uv venv 默认在当前目录创建 .venv。若目录中已有环境,先确认其用途,避免重建正在使用的环境。
cd /path/to/your-program
uv venv --python 3.12
source .venv/bin/activate
python --version
uv pip install -r requirements.txt
python main.py
激活后,当前 shell 的 python 指向 .venv,安装的库也放在这个环境中。可以这样确认:
python -c 'import sys; print(sys.executable)'
输出应指向程序目录下的 .venv/bin/python。运行结束后退出环境:
deactivate
下次使用时进入程序目录,重新 source .venv/bin/activate 即可,不必重新安装。不同程序使用各自的 .venv,其依赖可以互不影响。
uv pip 可以直接向虚拟环境安装包,不要求先在环境里安装 pip。不要把上述步骤换成 sudo pip install,也不要为了改变版本重建 /usr/bin/python3 的链接:openEuler 的 dnf 等工具依赖系统 Python 及其 RPM 软件包,两套环境应分别维护。
常见需求与问题
程序文档要求使用 pip,怎么办
uv pip 是 uv 自己提供的安装接口,不是在背后调用 pip。默认的 uv venv 不会安装 pip,因此新环境中执行 python -m pip 可能提示 No module named pip。
如果希望照程序文档使用 pip,在程序目录中激活已有环境,再补装即可:
source .venv/bin/activate
uv pip install pip
python -m pip --version
python -m pip install -r requirements.txt
版本输出中的安装路径应位于当前 .venv。此后也可以使用 pip install;这里推荐写 python -m pip,明确使用当前解释器对应的 pip,避免误用 PATH 中其他环境的命令。无需为此安装系统的 python3-pip RPM。
如果尚未创建环境,想一开始就带上 pip,可以把第 3 步的建环境命令换成:
uv venv --python 3.12 --seed
--seed 的说明见 uv venv 文档。已有环境补装 pip 即可,不需要为了这个选项重建。
下载慢或失败,应该改哪里
先看卡在哪一步。“给 Python 换源”实际上可能指三件不同的事:
- 安装 uv 时卡住:正在下载安装脚本或 uv 二进制程序。可以使用已有代理;如果慢的是二进制下载,也可以为安装器指定下载地址。
uv python install时卡住:正在下载 Python 解释器。可以使用已有代理,或设置 Python 下载镜像。uv pip install/python -m pip install时卡住:正在下载程序的第三方依赖。可以配置 PyPI 镜像,也可以使用已有代理。
uv 的解释器来自 Astral 的 python-build-standalone。安装工具和解释器时可能访问 Astral 的分发站点或 GitHub;PyPI 则提供第三方 Python 包。只改 PyPI 镜像,不会让前两种下载一起换源。
已有代理,让命令行使用它
如果运行命令的机器已经能使用一个 HTTP 代理,例如本机的 127.0.0.1:7890,先在当前终端设置:
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export HTTP_PROXY="$http_proxy"
export HTTPS_PROXY="$https_proxy"
把地址和端口换成自己的。这里填写的是 HTTP 代理入口,所以即使变量叫 https_proxy,地址仍可以以 http:// 开头。设置后重新执行之前的安装或下载命令即可;curl、uv 和 pip 都支持相应的代理环境变量。uv 环境变量说明、pip 代理说明
使用 export 后,curl ... | sh 两边的进程都能继承配置,包括安装脚本随后发起的下载。只在左侧 curl 前临时写一个变量,不会自动传给右侧的 sh。
浏览器能走代理,不代表终端已经配置好。通过 SSH 在服务器上执行命令时,127.0.0.1 指的是服务器自己;代理地址必须从那台服务器可达。
这些设置只影响当前终端及其子进程。测试后若要在当前终端取消,可执行:
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
没有通用代理,能用 GitHub 加速服务吗
可以针对 GitHub 下载地址使用 URL 前缀式加速服务。以下以 gh-proxy.com 的地址形式为例;其他服务的拼接规则可能不同。
下载 Python 时,为当前这一次命令指定镜像:
UV_PYTHON_INSTALL_MIRROR='https://gh-proxy.com/https://github.com/astral-sh/python-build-standalone/releases/download' \
uv python install 3.12
uv 会在这个地址后拼接构建日期和文件名,无需自行挑选架构对应的压缩包。该设置只改变 Python 解释器的下载来源,不影响 PyPI,也不改变 uv 安装器。Python 镜像配置说明
如果慢的是 uv 安装器获取二进制程序的阶段,可以使用另一项设置:
curl -LsSf https://astral.sh/uv/install.sh | \
UV_INSTALLER_GITHUB_BASE_URL='https://gh-proxy.com/https://github.com' sh
安装脚本仍从 Astral 获取,这个变量传给右侧的 sh,用于调整脚本随后下载 uv 二进制程序的地址;它不解决安装脚本本身无法获取的问题。安装器下载地址设置
这种加速网址不是 HTTP 代理服务器,不能直接填进 HTTPS_PROXY。它会把相应下载交给第三方服务,请选择自己信任的服务;可用性也可能随时间和网络变化。上面两个地址仅对各自那一次命令生效。
安装依赖慢,怎样设置 PyPI 镜像
以下以清华 PyPI 镜像为例。在已激活的虚拟环境中,按自己使用的工具选择一条:
# 使用 uv
uv pip install -r requirements.txt --default-index https://pypi.tuna.tsinghua.edu.cn/simple
# 使用已经安装到虚拟环境中的 pip
python -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
给前面补装 pip 的命令加上 --default-index 也可以。两条命令都是替换本次使用的默认包索引,无需同时执行。
如果经常需要,可以把配置保存在项目中。uv 使用项目目录中的 uv.toml:
[[index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
default = true
之后从这个目录执行 uv pip install 就不必重复带地址。如果项目已经有 uv 配置,在原配置上调整,不要直接覆盖;使用 pyproject.toml 的项目可参照 uv 配置说明采用对应格式。
pip 则可以在激活 .venv 后执行:
python -m pip config --site set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
这会写入当前虚拟环境的 .venv/pip.conf。--site 决定配置范围;键名里的 global 不表示修改全系统配置。保存后重试原来的安装命令即可。pip 配置说明
地址可以相同,配置并不共用。 pip 与 python -m pip 如果指向同一环境,读取的是同一套 pip 配置;uv pip 不读取 pip.conf 或 PIP_INDEX_URL,pip 也不会读取 uv.toml。环境变量同样分开:uv 使用 UV_DEFAULT_INDEX,pip 使用 PIP_INDEX_URL。uv 与 pip 的配置差异
如果换源后某个包或版本找不到,可以先只对这次命令把地址换回 https://pypi.org/simple,区分镜像同步情况与程序要求不兼容的问题。
uv 和 Conda 怎么选
如果只是需要指定版本的 Python,配合程序的 pip / requirements 安装说明运行,uv 是直接的选择。
Conda 除了 Python,还能管理原生库及其他语言的依赖。如果程序提供的是 environment.yml,或已围绕 Conda 组织科学计算环境,沿用它通常更合适;不要把 Conda 的环境文件直接当作 requirements 文件使用。两者也都不是容器,不提供操作系统层面的隔离。Conda 环境说明
系统 RPM 仍由 dnf 维护,uv 管理的解释器和虚拟环境中的依赖不会随 dnf update 更新。后续维护可查阅 uv 的 Python 版本管理文档及目标程序的升级说明。
验证说明(2026-09-20):安装与运行主线已在 openEuler 22.03 LTS SP4、24.03 LTS SP3 的 x86_64 和 aarch64 环境验证;pip、镜像及代理用法在 24.03 LTS SP3 x86_64 上补验。