uv - 使用 python-install-mirror 从镜像源下载 python

2025 年 5 月 13 日 星期二(已编辑)
499
5
这篇文章上次修改于 2025 年 6 月 3 日 星期二,可能部分内容已经不适用,如有疑问可询问作者。

uv - 使用 python-install-mirror 从镜像源下载 python

这篇已经收录在 explore-uv 仓库中:

.venv 下的 python 只是一个软连接

➜  yutto-uiya git:(dev) ✗ ls .venv/bin/ -la
总计 30760
drwxrwxr-x 2 xnne xnne     4096  5月15日 18:17 .
drwxrwxr-x 6 xnne xnne     4096  5月13日 16:04 ..
-rw-rw-r-- 1 xnne xnne     4102  5月13日 16:04 activate
-rw-rw-r-- 1 xnne xnne     2681  5月13日 16:04 activate.bat
-rw-rw-r-- 1 xnne xnne     2635  5月13日 16:04 activate.csh
-rw-rw-r-- 1 xnne xnne     4199  5月13日 16:04 activate.fish
-rw-rw-r-- 1 xnne xnne     3884  5月13日 16:04 activate.nu
-rw-rw-r-- 1 xnne xnne     2782  5月13日 16:04 activate.ps1
-rw-rw-r-- 1 xnne xnne     2393  5月13日 16:04 activate_this.py
-rwxrwxr-x 1 xnne xnne      325  5月13日 16:04 biliass
-rw-rw-r-- 1 xnne xnne     1728  5月13日 16:04 deactivate.bat
-rwxrwxr-x 1 xnne xnne      326  5月13日 16:04 f2py  
-rwxrwxr-x 1 xnne xnne      314  5月13日 16:04 httpx
-rwxrwxr-x 1 xnne xnne      323  5月13日 16:04 jsonschema
-rwxrwxr-x 1 xnne xnne      325  5月13日 16:04 natsort
-rwxrwxr-x 1 xnne xnne      316  5月13日 16:04 nodeenv
-rwxrwxr-x 1 xnne xnne      337  5月13日 16:21 normalizer
-rwxrwxr-x 1 xnne xnne      326  5月13日 16:04 numpy-config
-rw-rw-r-- 1 xnne xnne     1215  5月13日 16:04 pydoc.bat
-rwxrwxr-x 1 xnne xnne      332  5月13日 16:04 pyright
-rwxrwxr-x 1 xnne xnne      339  5月13日 16:04 pyright-langserver
-rwxrwxr-x 1 xnne xnne      332  5月13日 16:04 pyright-python
-rwxrwxr-x 1 xnne xnne      339  5月13日 16:04 pyright-python-langserver
-rwxrwxr-x 1 xnne xnne      331  5月13日 16:04 py.test
-rwxrwxr-x 1 xnne xnne      331  5月13日 16:04 pytest  
lrwxrwxrwx 1 xnne xnne       80  5月13日 16:04 python -> /home/xnne/.local/share/uv/python/cpython-3.13.0-linux-x86_64-gnu/bin/python3.13
lrwxrwxrwx 1 xnne xnne        6  5月13日 16:04 python3 -> python
lrwxrwxrwx 1 xnne xnne        6  5月13日 16:04 python3.13 -> python
-rwxrwxr-x 2 xnne xnne 31358864  5月13日 16:21 ruff
-rwxrwxr-x 1 xnne xnne      326  5月13日 16:04 streamlit
-rwxrwxr-x 3 xnne xnne      676  4月17日 14:29 streamlit.cmd
-rwxrwxr-x 1 xnne xnne      319  5月15日 18:17 test
-rwxrwxr-x 1 xnne xnne      318  5月15日 18:17 tmp
-rwxrwxr-x 1 xnne xnne      327  5月13日 16:04 watchmedo
-rwxrwxr-x 1 xnne xnne      323  5月13日 16:04 yutto

.venv 下的 python 并不是完整的, 所以在我像以前打包 conda 项目那样把包含环境的完整目录压缩传给用户后, 用户在运行 .bat 文件时, 它找不到 python (试图从我打包时的系统路径里寻找):

C:\Users\Administrator\Pictures\yutto-uiya-v1.1.4-pre>.\uv\uv.exe run streamlit run .\src\uiya\yutto_uiya.py  
error: Querying Python at `C:\Users\Administrator\Pictures\yutto-uiya-v1.1.4-pre\.venv\Scripts\python.exe` failed with exit status exit code: 103
[stderr] did not find executable at 'C:\Users\Zhouyuan\AppData\Roaming\uv\python\cpython-3.13.2-windows-x86_64-none\python.exe': ???????????                                                                                                                                                                  C:\Users\Administrator\Pictures\yutto-uiya-v1.1.4-pre>pause

uv 的 .venvconda env 不同, conda env 每创建一个环境虚拟环境都包含一个 python 和运行库, 而 uv 是直接从系统里面寻找, 然后创建软链接:

If Python is already installed on your system, uv will detect and use it without configuration. However, uv can also install and manage Python versions. uv automatically installs missing Python versions as needed — you don't need to install Python to get started.
如果系统中已经安装了 Python,uv 将检测并使用它,而无需配置。uv 会根据需要自动安装缺失的 Python 版本,因此无需安装 Python 即可开始使用。

这个特性看似很聪明, 但是它不可避免地造成了, .venv 不能独立使用, 不像 conda 那样子把 env 复制粘贴到另一个人电脑上也依然能用.

而用户在 uv 自动安装 python 和依赖的时候, 默认需要连接外网, 必然是会存在网络不可达的情况的。

那么,如何把自己写好的 uv 项目传递给那些可能网络上存在障碍的用户呢? 答案是使用镜像源。

对于 python 包, 我们也可以用 [[tool.uv.index]] 来替换 pypi 为清华源, 具体参考[[tool.uv.index]]章节。

而对于 python(python_build_stand_alone), 我们其实也可以使用镜像, 不过藏得相当深。

参考:

可以得知, 我们可以简单地在 pyproject.toml 中加上这么一段来替换 python 镜像.

[tool.uv]
# 下载 Python 的镜像
python-install-mirror = "https://github.com/astral-sh/python-build-standalone/releases/download" # 官方的默认镜像, 直接从 github 安装, 需要连接外网, 官方默认配置
# python-install-mirror = "https://mirror.nju.edu.cn/github-release/indygreg/python-build-standalone/" # 使用南京大学的镜像, 可能需要更新 uv 到新版本.

目前似乎只有南京源支持 python-install-mirror , 清华源似乎没有计划支持它.

另外, 应该保证使用尽量新的 uv, 因为旧的 uv 似乎不支持该特性.

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...