场景
执行:
uv lock \
--index-url https://pypi.tuna.tsinghua.edu.cn/simple \
--extra-index-url https://mirrors.aliyun.com/pypi/simple
什么也不输出
定位问题
uv 添加 --verbose 查看进度:确认是否在解析依赖而非真卡死:
uv lock \
--index-url https://pypi.tuna.tsinghua.edu.cn/simple \
--extra-index-url https://mirrors.aliyun.com/pypi/simple --verbose
弹出的错误:
INFO Fetching requested Python...
DEBUG Downloading https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz
DEBUG Extracting cpython-3.12.11-20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz to temporary location: /root/.local/share/uv/python/.temp/.tmplC4rH8
DEBUG Transient request failure for https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz, retrying: error sending request for url (https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz)
Caused by: operation timed out
分析原因:是不能访问github.com
验证分析:ping github.com
解决
从日志来看,uv 在下载 python-build-standalone 时出现了超时错误,这是典型的网络访问受限问题。可以通过以下强制使用本地文件的方式彻底解决,无需依赖网络:
解决步骤:手动部署本地 Python 环境并让 uv 直接使用
- 手动下载所需文件
用能访问 GitHub 的环境(如手机热点、其他网络)下载对应版本的文件,或通过代理站下载:
# 用代理站下载(确保能成功下载)
wget https://ghproxy.com/https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz
将下载好的文件传到当前服务器(如通过 scp 或文件传输工具)。
2. 手动解压到 uv 识别的目录
uv 会优先读取预安装的独立 Python 环境,将文件解压到指定目录:
# 创建存放目录
mkdir -p /root/.local/share/uv/python/
# 解压文件(替换为你的实际文件名)
tar -zxf cpython-3.12.11+20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz -C /root/.local/share/uv/python/
# 查看解压后的目录(应出现类似 python-3.12.11+20250604 的文件夹)
ls /root/.local/share/uv/python/
- 强制 uv 使用本地已解压的环境
通过 --python 参数直接指定本地 Python 路径,跳过下载步骤:
# 查看本地 Python 可执行文件路径(替换为实际解压后的文件夹名)
ls /root/.local/share/uv/python/python-3.12.11+20250604-x86_64-unknown-linux-gnu/bin/python3
# 用本地 Python 创建虚拟环境(示例)
uv venv --python /root/.local/share/uv/python/python-3.12.11+20250604-x86_64-unknown-linux-gnu/bin/python3
# 生成锁文件(示例)
uv lock --python /root/.local/share/uv/python/python-3.12.11+20250604-x86_64-unknown-linux-gnu/bin/python3
- 验证是否生效
运行命令后,日志中若出现 Using Python from … 且没有下载相关的 DEBUG 信息,说明已成功使用本地环境:
# 示例:查看虚拟环境使用的 Python 版本
. .venv/bin/activate # 激活虚拟环境
python --version # 应显示 3.12.11
关键原理
uv 依赖 python-build-standalone 提供的独立 Python 环境,但当网络不可用时,可通过手动部署 + 强制指定路径的方式,让 uv 跳过下载步骤,直接使用本地预准备的环境。
这种方法彻底绕开了网络限制,适合任何无法访问 GitHub 的场景。如果后续需要其他 Python 版本,只需重复上述步骤部署对应版本即可。