【python开发】使用 uv 来开发和管理 Python 程序

news/2025/3/25 20:47:38/文章来源:https://www.cnblogs.com/o-O-oO/p/18788454

说明

开发和运行一个 Python 程序通常涉及两个关键问题:选择 Python 版本 和 管理程序依赖。

1、Python 版本管理:过去,我们通常使用 Pyenv 来安装和切换不同的 Python 版本。

2、依赖管理:传统上,我们依赖 Pipenv、Virtualenv 或 Conda 等工具来安装和管理 Python 包。

uv 是一款新兴的 Python 依赖管理工具,能够替代这些传统工具,实现更高效的开发体验。它采用 Rust 编写,具备卓越的性能,同时整合了Python 版本管理和依赖管理功能,无需手动创建虚拟环境,能够自动管理项目所需的环境。相比传统方案,uv 解析依赖的速度更快、使用方式更简单,是现代 Python 开发者的更理想选择。本文记录和介绍一下uv的安装和主要用法。

安装

curl -LsSf https://astral.sh/uv/install.sh | sh

使用

1、Python 版本

# 显示所有的可安装的 Python 版本
$ uv python list
cpython-3.14.0a5+freethreaded-macos-aarch64-none    <download available>
cpython-3.14.0a5-macos-aarch64-none                 <download available>
cpython-3.13.2+freethreaded-macos-aarch64-none      <download available>
cpython-3.13.2-macos-aarch64-none                   <download available>
cpython-3.13.1-macos-aarch64-none                   <download available>
cpython-3.12.9-macos-aarch64-none                   <download available>
cpython-3.12.8-macos-aarch64-none                   <download available>
cpython-3.11.11-macos-aarch64-none                  <download available>
cpython-3.11.11-macos-aarch64-none                  <download available>
cpython-3.11.5-macos-aarch64-none                   <download available>
cpython-3.11.5-macos-aarch64-none                   <download available>
cpython-3.11.5-macos-aarch64-none                   <download available>
cpython-3.10.16-macos-aarch64-none                  <download available>
cpython-3.10.16-macos-aarch64-none                  <download available>
cpython-3.9.21-macos-aarch64-none                   <download available>
cpython-3.9.21-macos-aarch64-none                   <download available>
cpython-3.9.6-macos-aarch64-none                    <download available>
cpython-3.8.20-macos-aarch64-none                   <download available>
pypy-3.11.11-macos-aarch64-none                     <download available>
pypy-3.10.16-macos-aarch64-none                     <download available>
pypy-3.9.19-macos-aarch64-none                      <download available>
pypy-3.8.16-macos-aarch64-none                      <download available># 安装指定版本(3.12.9)
$ uv python install cpython-3.12.9                                
Installed Python 3.12.9 in 29.76s+ cpython-3.12.9-macos-aarch64-none

2、指定 Python 版本运行

# 指定版本运行 Python 脚本(a.py)
$ uv run -p 3.12 a.py
Hello uv$ uv run -p 3.12 python
Python 3.12.9 (main, Feb 12 2025, 15:09:19) [Clang 19.1.6 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.

3、创建项目

# 创建并初始化项目工程
$ mkdir uv_app
$ cd uv_app
$ uv init -p 3.12
Initialized project `uv-app`# 自动创建的文件
$ tree .                                                          
.
├── README.md
├── main.py
└── pyproject.toml1 directory, 3 file

4、依赖包

# 安装指定依赖包
$ uv add requests                                                 
Using CPython 3.12.9
Creating virtual environment at: .venv
Resolved 6 packages in 2.41s
Prepared 5 packages in 1.84s
Installed 5 packages in 20ms+ certifi==2025.1.31+ charset-normalizer==3.4.1+ idna==3.10+ requests==2.32.3+ urllib3==2.3.0# 显示所有依赖关系
$ uv tree                                                       
Resolved 6 packages in 7ms
uv-app v0.1.0
└── requests v2.32.3├── certifi v2025.1.31├── charset-normalizer v3.4.1├── idna v3.10└── urllib3 v2.3.0# 安装指定版本的依赖包
$ uv add "requests==2.31.0"                                         
Resolved 6 packages in 1.94s
Prepared 1 package in 1.09s
Uninstalled 1 package in 7ms
Installed 1 package in 8ms- requests==2.32.3+ requests==2.31.0# 删除指定依赖包
$ uv remove requests
Resolved 1 package in 13ms
Uninstalled 5 packages in 7ms- certifi==2025.1.31- charset-normalizer==3.4.1- idna==3.10- requests==2.32.3- urllib3==2.3.0

5、开发依赖包

# 安装指定开发依赖包(避免打包进来)
$ uv add ruff --dev                                               
Resolved 2 packages in 2.32s
Prepared 1 package in 7.36s
Installed 1 package in 6ms+ ruff==0.9.10# 删除开发依赖包
$ uv remove ruff --group dev                                        
Resolved 1 package in 9ms
Uninstalled 1 package in 1ms- ruff==0.9.10

6、工具

# 安装工具到系统中
$ uv tool install ruff                                            
Resolved 1 package in 855ms
Installed 1 package in 11ms+ ruff==0.9.10
Installed 1 executable: ruff# 查看已安装的工具
$ uv tool list                                                      
ruff v0.9.10
- ruff

7、运行

# 运行脚本
$ uv run main.py                                                  
Hello from uv-app!

8、打包、安装和运行

  • 编写打包信息
# 编写 project.toml 增加以下信息
[project.scripts]
uv_app = "main:main"
  • 打包
# Build
$ uv build
Building source distribution...
running egg_info
creating uv_app.egg-info
writing uv_app.egg-info/PKG-INFO
writing dependency_links to uv_app.egg-info/dependency_links.txt
writing entry points to uv_app.egg-info/entry_points.txt
writing top-level names to uv_app.egg-info/top_level.txt
writing manifest file 'uv_app.egg-info/SOURCES.txt'
reading manifest file 'uv_app.egg-info/SOURCES.txt'
writing manifest file 'uv_app.egg-info/SOURCES.txt'
...
...
...
adding 'main.py'
adding 'uv_app-0.1.0.dist-info/METADATA'
adding 'uv_app-0.1.0.dist-info/WHEEL'
adding 'uv_app-0.1.0.dist-info/entry_points.txt'
adding 'uv_app-0.1.0.dist-info/top_level.txt'
adding 'uv_app-0.1.0.dist-info/RECORD'
removing build/bdist.macosx-11.0-arm64/wheel
Successfully built dist/uv_app-0.1.0.tar.gz
Successfully built dist/uv_app-0.1.0-py3-none-any.whl
  • 安装
# 安装
$ uv tool install dist/uv_app-0.1.0-py3-none-any.whl                
Resolved 1 package in 10ms
Prepared 1 package in 17ms
Installed 1 package in 3ms+ uv-app==0.1.0 (from file:///Users/hwsdien/uv_test/uv_app/dist/uv_app-0.1.0-py3-none-any.whl)
Installed 1 executable: uv_app
  • 运行
# 运行
$ uv_app                                                            
Hello from uv-app!

总结

uv 提供了一个高效、简单的方式来管理 Python 项目的版本和依赖,适合现代 Python 开发者使用。通过整合 Python 版本管理和依赖管理功能,uv 能够显著提升开发体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904407.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

User\main.c(7): error: #5: cannot open source input file ds18b02.h: No such file or directory

报错截图解决途径 复制报错信息上网搜索,一般的解决办法:在c/c++选项中的Include Paths中包含头文件,将移植过来的代码放到指定的文件夹里,在Floder Setup中设置新移植的文件路径。很可惜我确认过我包含了头文件,但仍然报同样错误。 最后发现我代码里面是 #include"d…

Bean注入几种方式 (放入Spring容器)

目录 1、XML方式注入set方式注入构造方法注入2、注解方式注入@Component + @ComponentScan@Configuration + @Bean + @ComponentScan@Import3、实现ImportBeanDefinitionRegistrar接口 4、实现FactoryBean 5、实现BeanDefinitionRegistryPostProcessor 一、XML方式注入 在现在这…

自然资源数据要素支撑场景建设

自然资源数据要素与场景建设是推动经济社会高质量发展的重要途径。随着数字经济的快速发展,自然资源数据已成为关键的生产要素,其价值挖掘和利用成为推动经济社会发展的关键。自然资源数据要素的重要性自然资源数据要素包括地理、土地、矿产、海洋等多源数据,是支撑经济社会…

C语言分支与循环基础应用编程

实验任务1#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 5int main() {int number;int i;srand(time(0));for(i=0;i<N;++i){number=rand()%100+1;printf("20490042%04d\n",number);}return 0; }问题1:生成一个1~100的随机…

NSSCTF Round#28 Team web题解

真是让人操心,但是又无法转移视线ez_ssrf 很简单的ssrf,知识点在网上搜都能搜到 payload http://node3.anna.nssctf.cn:28658@127.255.255.254/flag ez_php 第一部分有个非预期,直接/file就能出flag is_numeric绕过和md5强比较,很简单的知识点,这里就不细说了 第二部分网上…

Netty源码—4.客户端接入流程

大纲 1.关于Netty客户端连接接入问题整理 2.Reactor线程模型和服务端启动流程 3.Netty新连接接入的整体处理逻辑 4.新连接接入之检测新连接 5.新连接接入之创建NioSocketChannel 6.新连接接入之绑定NioEventLoop线程 7.新连接接入之注册Selector和注册读事件 8.注册Reactor线程…

【Esp32】为 idf 定制本地 Arduino 组件

在开始今天的水文前,老周先要奉劝一下国内某些嵌入式砖家和穴者,不要看不起 Arduino,它不是一种开发板,而是一种规范。Arduino 的思想是正确的,把各种开发板封装为统一的 API,让许多开源库共享相同的基础代码,严重降低了移植成本。Arduino 本质上使用的是 C/C++ 开发,只…

编译原理第五次作业

2.2.1 1)S-> S S *-> S S + S *->a S + S *->a a + S *->a a + a * 2)3)L={由多个a,加号,乘号组成的后缀表达式} 2.2.2 1)L={0^n 1^n | n>=1} 2)L={由多个a,加号,减号组成的前缀表达式} 3)L={ε或任意排列,嵌套的括号} 4)L={ε或包含相同数量a,b的字符…

XN2025 集训记录 D2

我好想你们啊 . 我怀念高一啊 . 至少还有理由放任自己开心不是吗 .XN2025 集训记录 D2 又是摆烂的一天 , 感觉打模拟赛时候的自己和改题时的自己完全不是一个人 . 不过往好了想 , 至少足够的模拟赛量 , 意味着我的高效率时间虽然不多 , 但是还有 . 买了个usb转网线 , 破费 39.9…

基于对偶二次曲线的快速椭圆检测

利用对偶二次曲线可精确求解椭圆圆心坐标。1、对偶二次曲线原理 二次曲线也称圆锥曲线,其几何定义是一个平面与两个顶点相对的圆锥相交所产生的交线。通常二次曲线指的是点二次曲线,它是定义在曲线点上的方程。而在射影几何中,齐次点和齐次线存在着可以互换的二元关系,因此…

【程设の旅】Python速通作业三

这节课老师讲了Python的面向对象部分 速度比较快 但是结合前面cpp的大部分知识可以弄懂 最后一道题估计是py特性了 可以理解但是那两个函数不知道是什么鬼 01:运算符的实现 描述 程序填空class A:def __init__(self,x):self.x = x // 在此处补充你的代码 a,b,c = map(int,input…

C/C++开发文档和常用的输入方式汇总

前几天复习的几种输入方式和帮助文档C/C++开发文档获取 之前下载过应该开发文档,今天push到了Gitee上了。可以随时获取,链接字符串操作 C 字符串 | 菜鸟教程 输入输出【包含字符串】 C 输入 & 输出 | 菜鸟教程 #include<stdio.h> int main() {char s[20];int i = 0…