uv安装python及其依赖的加速方法

简介: 国内在使用uv的时候,可能会涉及到装python的速度太慢的问题,为了解决这个问题,可以使用`UV_PYTHON_INSTALL_MIRROR`这个环境变量。除此以外,对于多人协作场景,`UV_CACHE_DIR`也是一个有用的环境变量。本文会介绍这两个变量。

国内在使用uv的时候,可能会涉及到装python的速度太慢的问题,为了解决这个问题,可以使用UV_PYTHON_INSTALL_MIRROR这个环境变量。除此以外,对于多人协作场景,UV_CACHE_DIR也是一个有用的环境变量。本文会介绍这两个变量。

UV_PYTHON_INSTALL_MIRROR

uv syncuv venvuv python install这几个命令都会安装一个python。这个python的安装包会从astral-sh/python-build-standalone/releases这里下载。但是对于国内的一些位置,从这里下载python的速度非常慢,有些地方根本访问不了。一个比较简单的方法是自己先进入这个页面,找到一个版本,比如20250409,然后下载几个需要的python版本,比如3.10、3.11、3.12,然后根据自己机器的架构,比如是x86_64的,linux系统,那就下载:

cpython-3.10.17+20250409-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz
cpython-3.11.12+20250409-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz
cpython-3.12.10+20250409-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz

然后在本地建一个目录,比如/mnt/workspace/uv_python_install_mirror/20250409,然后将上述压缩包放入这个目录,然后将环境变量UV_PYTHON_INSTALL_MIRROR设置成这个目录,这样就uv就会去这个目录里面找压缩包,然后快速安装python了。比如export UV_PYTHON_INSTALL_MIRROR=file:///mnt/workspace/uv_python_install_mirror/20250409

UV_CACHE_DIR

uv会把这台机器上安装过的一些源码包、wheel包存储在这个环境变量指向的目录下。因此一旦通过uv sync同步过一个环境,那么这个环境需要的依赖包就会在这个目录存储一份。对于云原生场景,启动一个新的容器,在这个容器里面使用uv sync,或者uv pip install的时候,如果可以将这个缓存目录挂载到容器内,然后设定环境变量UV_CACHE_DIR指向这个目录,那就可以快速拉起一个环境,所有的依赖都不需要重新下载了。

简单来说就是在开发机上,设定UV_CACHE_DIR为一个可共享的目录。然后用uv sync同步一个环境,此时这个目录就会存储各种缓存。然后在云原生平台启动容器的时候,挂载这个目录,并且设定容器的环境变量UV_CACHE_DIR为这个目录。然后在容器内使用uv sync,就可以利用这份缓存数据快速拉起环境。

当然,上述方法也有缺点。比如像阿里云的NAS,如果使用NFS协议挂载,由于uv在构建环境的时候是并行,存在一部分python包他们的文件是冲突的,uv的并行会让阿里云的NAS出错,会报一个OS Error 523。阿里云官方文档有讲具体原因,核心问题就是在阿里云NAS上以NFS协议挂载的时候,不支持并发对一个目录的文件进行rename。这是阿里云NAS产品设计上的问题,所以使用阿里云NAS作为uv缓存的话,就需要用户自己解决了。我目前测试的结果是,像部分jupyter相关的包,会冲突,会报523。但是报了523后,可以再次执行uv sync,然后这个同步会继续进行,多执行几次,就可以强制安装好环境。

目录
相关文章
|
14天前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
118 1
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
|
2月前
|
调度 Python
微电网两阶段鲁棒优化经济调度方法(Python代码实现)
微电网两阶段鲁棒优化经济调度方法(Python代码实现)
|
2月前
|
传感器 大数据 API
Python数字限制在指定范围内:方法与实践
在Python编程中,限制数字范围是常见需求,如游戏属性控制、金融计算和数据过滤等场景。本文介绍了五种主流方法:基础条件判断、数学运算、装饰器模式、类封装及NumPy数组处理,分别适用于不同复杂度和性能要求的场景。每种方法均有示例代码和适用情况说明,帮助开发者根据实际需求选择最优方案。
84 0
|
7天前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
75 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
7天前
|
异构计算 Python
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
71 1
|
7天前
|
人工智能 Shell Python
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
43 0
|
19天前
|
算法 调度 决策智能
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
|
2月前
|
数据处理 开发工具 开发者
requirement.txt 管理python包依赖
在 Python 项目中,`requirements.txt` 用于记录依赖库及其版本,便于环境复现。本文介绍了多种生成该文件的方法:基础方法使用 `pip freeze`,进阶方法使用 `pipreqs`,专业方法使用 `poetry` 或 `pipenv`,以及手动维护方式。每种方法适用不同场景,涵盖从简单导出到复杂依赖管理,并提供常见问题的解决方案,帮助开发者高效生成精准的依赖列表,确保项目环境一致性。
396 4
|
2月前
|
机器学习/深度学习 数据采集 算法
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
133 4

推荐镜像

更多