uv找不到Python头文件的解决方案

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 最近在微调LLM的时候,我发现使用uv构建的环境,有时候会找不到Python.h,导致一些库报错,如`fatal error: Python.h: No such file or directory`。通过设置`python-preference`可以解决。

最近在微调LLM的时候,我发现使用uv构建的环境,有时候会找不到Python.h,导致一些库报错,如fatal error: Python.h: No such file or directory。通过设置python-preference可以解决。

我最近使用nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04这个镜像,在里面安装了uv。然后每个使用uv管理的项目都用这个镜像运行代码。也就是将代码下载到容器里面,通过uv sync快速拉起虚拟环境,然后通过uv run运行项目。

然而我发现在使用ms-swift进行微调的时候,就会报fatal error: Python.h: No such file or directory这个错误。研究后发现有几个条件同时满足的时候,就会触发这个问题:

  1. 基础镜像里面安装了python(非dev版本):我这个镜像安装的是python3.10
  2. 项目使用的python版本和机器上的python版本一致:我这个项目用的是python3.10

当uv发现机器上已经安装python的时候,会默认选择使用机器上的python。详细的可以看官方文档:Concepts: python-versions。在uv的体系中,存在两种python,一种是managed Python,一种是system Python。前者表示uv自行安装的python,后者是系统内已经安装的python。

同时uv里面有一个设定:python-preference。这个选项默认值是managed。表示“相比system Python,uv会优先使用managed Python”。除此以外,还有only-managed,system,only-system这三种。

考虑到我的情况:容器里面只有1个python,是system Python,版本是3.10。我要运行的项目也是3.10。uv默认使用managed模式,因此就没有安装python,用了系统自带的python。而系统自带的这个python又是非dev版,没有Python.h这样的头文件,所以flash-attention这些需要Python.h头文件的库就会报错。

因此解决方案就是设定上文提到的:python-preference,修改为only-managed

[tool.uv]
python-preference = "only-managed"
AI 代码解读

这个选项的含义是只使用managed Python,不用system Python。在项目的pyproject.toml里面增加上述配置后,uv sync的时候就会下载一个python3.10,并且带头文件,这样就不会报错了。

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
目录
相关文章
|
14天前
|
解决Python报错:DataFrame对象没有concat属性的多种方法(解决方案汇总)
总的来说,解决“DataFrame对象没有concat属性”的错误的关键是理解concat函数应该如何正确使用,以及Pandas库提供了哪些其他的数据连接方法。希望这些方法能帮助你解决问题。记住,编程就像是解谜游戏,每一个错误都是一个谜题,解决它们需要耐心和细心。
61 15
uv安装python及其依赖的加速方法
国内在使用uv的时候,可能会涉及到装python的速度太慢的问题,为了解决这个问题,可以使用`UV_PYTHON_INSTALL_MIRROR`这个环境变量。除此以外,对于多人协作场景,`UV_CACHE_DIR`也是一个有用的环境变量。本文会介绍这两个变量。
432 10
Python图像处理中的内存泄漏问题:原因、检测与解决方案
在Python图像处理中,内存泄漏是常见问题,尤其在处理大图像时。本文探讨了内存泄漏的原因(如大图像数据、循环引用、外部库使用等),并介绍了检测工具(如memory_profiler、objgraph、tracemalloc)和解决方法(如显式释放资源、避免循环引用、选择良好内存管理的库)。通过具体代码示例,帮助开发者有效应对内存泄漏挑战。
97 1
Python与Plotly:B站每周必看榜单的可视化解决方案
Python与Plotly:B站每周必看榜单的可视化解决方案
Python技术进阶:动态代理IP的跨境电商解决方案
Python技术进阶:动态代理IP的跨境电商解决方案
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
1210 3
前后端分离的进化:Python Web项目中的WebSocket实时通信解决方案
在现代Web开发领域,前后端分离已成为一种主流架构模式,它促进了开发效率、提升了应用的可维护性和可扩展性。随着实时数据交互需求的日益增长,WebSocket作为一种在单个长连接上进行全双工通讯的协议,成为了实现前后端实时通信的理想选择。在Python Web项目中,结合Flask框架与Flask-SocketIO库,我们可以轻松实现WebSocket的实时通信功能。
130 2
快速在linux上配置python3.x的环境以及可能报错的解决方案(python其它版本可同样方式安装)
这篇文章介绍了在Linux系统上配置Python 3.x环境的步骤,包括安装系统依赖、下载和解压Python源码、编译安装、修改环境变量,以及常见安装错误的解决方案。
753 1
|
7月前
|
python中3种获取cookie解决方案
python中3种获取cookie解决方案
55 0
|
7月前
|
解析Python中的全局解释器锁(GIL):影响、工作原理及解决方案
解析Python中的全局解释器锁(GIL):影响、工作原理及解决方案
102 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等