【Python】开发工具uv

文章目录

  • 1. uv install
    • 1.1 下载安装脚本来安装
    • 1.2 使用pipx安装uv
    • 1.3 补充
  • 2. 考虑在离线系统上安装uv
    • 2.1 下载并上传安装包
    • 2.2 用户级安装uv(~/.local/bin/)
    • 2.3 补充
  • 3. uv 管理Python解释器
  • 4. uv 管理依赖
  • 5. uv运行代码
    • 5.1 uv不在项目下执行脚本
    • 5.2 uv在项目下执行脚本
    • 5.3 uv执行脚本,脚本自己维护依赖
    • 5.4 补充
  • 6. python开发工具管理
  • 7. 项目打包为.whl文件
  • 补充

1. uv install

1.1 下载安装脚本来安装

# 用curl
curl -LsSf https://astral.sh/uv/install.sh | sh# 用wget
wget -qO- https://astral.sh/uv/install.sh | sh

1.2 使用pipx安装uv

补充:pipx是安全地安装和运行隔离的 Python 命令行工具,它能够解决全局安装python应用( pip install --usersudo pip install)的依赖冲突和环境污染问题。sudo pip install <pkg>
安装的可执行文件位置:/usr/local/bin
安装的库文件位置:
/usr/local/lib/pythonX.X/dist-packages/ (Debian/Ubuntu)
/usr/lib/pythonX.X/site-packages/ (RHEL/CentOS)pip install --user <pkg>
安装的可执行文件位置:~/.local/bin/
安装的库文件位置:~/.local/lib/pythonX.X/site-packages/pipx install <pkg>
将每个工具安装在独立的虚拟环境中
~/.local/pipx/venvs/flake8/     # flake8 的独立环境# 先安装pipx
sudo apt install pipx# 再安装uv
pipx install uv
pipx ensurepath && source ~/.basrc

1.3 补充

  • pipx依赖venv,需要确保venv全局安装。sudo apt install python3.8-venv
  • pip安装提示,Not installing to existing directory。可能是之前失败安装存在残留文件。pipx install --force
  • 安装uv后还需要将可执行文件目录添加到$PATH。执行pipx ensurepath可以自动把pipx下载的工具的可执行文件目录都添加到$PATH

2. 考虑在离线系统上安装uv

2.1 下载并上传安装包

# 使用pip下载,.whl安装包在当前目录,可能有多个.whl文件,所以打包
pip download uv
cd .. && tar -zcvf uv.tar.gz uv/scp uv.tar.gz cg@192.168.250.234:~/Downloads/

2.2 用户级安装uv(~/.local/bin/)

# 解压
cd ~/Downloads/
tar -zxvf uv.tar.gz# 安装到用户级site-package
pip install --no-index --find-links=~/Downloads/uv uv
--no-index:禁止从 PyPI 下载。
--find-links=.:从当前目录查找包。# 添加~/.local/bin到$PATH
echo 'export PATH=$HOME/.local/bin:$PATH'

2.3 补充

Q:安装包为uv-0.7.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl,包名:uv;包版本:0.7.3;python兼容版本:python3;abi标签:none,表示不依赖python abi(不依赖任何扩展的纯python包);架构:x86_64;系统兼容性:manylinux标准(manylinux_2_17和manylinux2014)。目标机器架构为arm,无法安装这个安装包。
A:确认安装包的平台版本和目标系统平台兼容,目标系统是x86_64的,则安装包应该是x86_64d的, 目标系统是arm结构的,安装包应该是arm架构的。

3. uv 管理Python解释器

# 查看uv可安装和已经安装的python版本
uv list python# 安装指定版本的python,安装位置 /home/user01/.local/share/uv/python/
uv python install cpython-3.12# 使用已安装的某个版本的python解释器执行
uv run -p 3.12 main.py# 使用已安装的某个版本的python解释器进入交互式执行环境
uv run -p 3.12 pythonps: uv指定python解释器版本时,如果uv没有安装之,则会自动安装它

4. uv 管理依赖

# 创建工程
mkdir test && cd test
uv init -p 3.12# 目录树
tree
├── .git
├── .gitignore
├── .python-version  # 3.12
├── README.md
├── main.py
└── pyproject.toml  # 跟踪项目当前依赖# 假设项目源码文件依赖和pyproject.toml记录的不一样
uv sync

5. uv运行代码

5.1 uv不在项目下执行脚本

# main.py
import requestsif __name__ == '__main__':url = 'www.baidu.com'resp = requests.get(url)print(resp.text)# 执行脚本,未导入依赖报错
uv run main.py# 执行脚本,命令行中指定依赖,依赖下载到~/.cache/uv
uv run --no-project --with rich main..py

5.2 uv在项目下执行脚本

# 进入项目
cd test# 执行脚本,未导入依赖错误
uv run main.py# 执行脚本,命令行中指定依赖,依赖下载到~/.cache/uv
uv run --with requests main.py# 执行脚本,使用项目的虚拟环境维护依赖
uv add requests  # pyproject.toml记录了requests及其依赖
uv run main.py# 打印uv工程依赖树
uv treetest v0.1.0
└── requests v2.32.3├── certifi v2025.4.26├── charset-normalizer v3.4.2├── idna v3.10└── urllib3 v2.4.0# 从项目中以础依赖
uv remove requests

5.3 uv执行脚本,脚本自己维护依赖

# 脚本自己加上所需依赖
uv add --script main.py requests# uv将往main.py头插入记录依赖信息的注释
# /// script
# requires-python = ">=3.13"
# dependencies = [
#     "requests",
# ]
# ///import requestsif __name__ == '__main__':url = 'https://www.baidu.com'resp = requests.get(url)print(resp.text)# 执行,以脚本模式运行,即使在uv项目中也可以不加--no-project而运行
uv run --script main.py

5.4 补充

• uv初始化项目后首次执行run会先创建项目虚拟环境:.venv
• 在uv项目中,uv run xxx.py将以项目方式运行(使用项目的虚拟环境);在uv项目中,uv run --with xxx将使用临时环境(~/.cache/uv/);在项目中,uv run --script main.py将使用临时环境(~/.cache/uv),但是脚本自己可以维护依赖,而不必在命令行中用–with来指定依赖。

6. python开发工具管理

开发需要python工具,可将这些工具添加到项目依赖,但这些工具不应该随其他项目依赖打包。
uv add flake8 --dev

但是实际工程中,这些工具应该与项目无关,需要在其他地方维护。另外即使通过–dev可以避免项目打包时把工具打包进去,但是添加工具时可能添加工具自己的依赖到项目中而污染了项目的虚拟环境。正确做法时使用uv tool来维护这些工具。

# 工具安装到~./cache/uv/
uv tool install flake8# 查看已经安装的工具
uv tool list

7. 项目打包为.whl文件

# pyproject.toml文件中添加session
[project]
name = "p10-tmp"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = [][prject.scripts]
test = ["test:main"]# 打包
uv build 
dist
├── p10_tmp-0.1.0-py3-none-any.whl
└── p10_tmp-0.1.0.tar.gz# 安装离线包
uv tool install dist/p10_tmp-0.1.0-py3-none-any.whl

补充

Q&A
Q:pip如何确定package安装到系统目录还是用户目录
A:pip根据以下要素判断该把package放到哪里:

  1. 是否添加–user参数:加–user参数,package放到用户级site-package中
  2. 是否处于虚拟环境激活状态:虚拟环境激活状态,package放在虚拟环境的site-package中
  3. 普通用户还是特权用户(root用户或者sudo pip install):普通用户则放在用户的site-package,特权用户则放在系统site-package中。
    注意,普通用户执行pip install 等价于pip install --user .

more about pip

• --user parameter
pip install --help
–user: Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on Windows. (See the Python documentation for site.USER_BASE for full details.)

• pip’'s doc
https://packaging.python.org/en/latest/tutorials/installing-packages/

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

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

相关文章

zabbix批量主机维护脚本兼容性更新

最近做新老版本zabbix监控主机迁移发现zabbix6.0后api安全有了效大升级&#xff0c;批量主机维护脚本出现认证兼容性问题&#xff0c;以下为脚本更新token支持&#xff1a;在这里插入代码片&#xff1a; # /usr/bin/env python3 # -*- coding:utf-8 -*- import requests impor…

Java中static关键字深度解析:从入门到高阶实战

Java中static关键字深度解析&#xff1a;从入门到高阶实战 目录 static的本质与核心特性静态变量 vs 实例变量&#xff1a;底层对比静态方法的设计哲学与应用场景高级用法&#xff1a;突破常规的static技巧 4.1 静态代码块&#xff1a;类加载的“初始化引擎”4.2 静态内部类&…

基于RT-Thread的STM32F4开发第五讲——软件模拟I2C

文章目录 前言一、RT-Thread工程创建二、AT24C02三、函数编写1.I2C_soft.c2.I2C_soft.h3.main.h 四、效果展示五、资源分享总结 前言 本章是基于RT-Thread studio实现软件模拟I2C&#xff0c;开发板是正点原子的STM32F4探索者&#xff0c;使用的RT-Thread驱动是5.1.0&#xff0…

49、c# 能⽤foreach 遍历访问的对象需满足什么条件?

在 C# 中&#xff0c;要使用 foreach 循环遍历一个对象&#xff0c;该对象必须满足以下条件之一&#xff1a; 1. 实现 IEnumerable 或 IEnumerable 接口 非泛型版本&#xff1a;System.Collections.IEnumerable public class MyCollection : IEnumerable {private int[] _da…

推客小程序系统开发:全栈式技术解决方案与行业赋能实践​

​ 在数字化营销深度渗透各行业的当下&#xff0c;传统推广模式已难以满足企业精细化运营与高效获客的需求。专业的推客小程序系统凭借其强大的裂变传播能力与灵活的推广机制&#xff0c;成为企业构建私域流量池、提升推广效能的核心工具。我们基于多年技术沉淀与行业洞察&…

WPF布局系统详解:掌握界面设计的核心艺术

掌握界面设计的核心艺术 1. WPF布局系统概述2. Grid布局详解2.1 基本行列定义2.2 单元格定位与跨行跨列 3. StackPanel布局4. DockPanel布局5. WrapPanel与Canvas5.1 WrapPanel自动换行布局 5. Canvas绝对定位6. 布局嵌套与综合应用7. 布局性能优化8. 响应式布局技巧9. 实战&am…

labview实现LED流水灯的第一种方法

目的&#xff1a;写一个跑马灯程序&#xff0c;7个灯从左到右不停的轮流点亮&#xff0c;闪烁间隔由滑动条调节。 一、方法1&#xff1a;使用顺序结构 使用顺序结构&#xff0c;平铺式顺序结构与创建局部变量实现LED流水灯 具体步骤如下&#xff1a; 第一步&#xff0c;选择…

uniapp如何设置uni.request可变请求ip地址

文章目录 简介方法一&#xff1a;直接在请求URL中嵌入变量方法二&#xff1a;使用全局变量方法三&#xff1a;使用环境变量方法四&#xff1a;服务端配置方法五&#xff1a;使用配置文件&#xff08;如config.js&#xff09;:总结 简介 在uni-app中&#xff0c;uni.request 用…

深度学习篇---LSTMADF轨迹预测

文章目录 前言LSTM 轨迹预测原理应用在行人轨迹预测方面在自动驾驶车辆的轨迹预测中优点缺点APF 轨迹预测原理应用在船舶运动规划在无人驾驶车辆避障轨迹跟踪优点缺点示例代码前言 本文简单介绍LSTM(长短期记忆网络)和ADF(人工势场法)这两种不同的轨迹预测方法。 LSTM 轨迹…

python实现Web请求与响应

目录 一&#xff1a;什么是Web请求与响应&#xff1f; 1&#xff1a;Web请求 2&#xff1a;Web响应 3&#xff1a;HTTP协议概述 4&#xff1a;常见的HTTP状态码包括&#xff1a; 二&#xff1a;python的requests库 1&#xff1a;安装requests库 2&#xff1a;发送GET请…

Unity使用sherpa-onnx实现说话人识别

网友软绵绵的面包人推荐&#xff0c;模型3dspeaker_speech_eres2net_base_200k_sv_zh-cn_16k-common.onnx的效果比3dspeaker_speech_eres2net_base_sv_zh-cn_3dspeaker_16k.onnx要好 具体代码 using System; using System.Collections.Generic; using System.IO; using Sherpa…

ElasticSearch-集群

本篇文章依据ElasticSearch权威指南进行实操和记录 1&#xff0c;空集群 即不包含任何节点的集群 集群大多数分为两类&#xff0c;主节点和数据节点 主节点 职责&#xff1a;主节点负责管理集群的状态&#xff0c;例如分配分片、添加和删除节点、监控节点故障等。它们不直接…

LG P9844 [ICPC 2021 Nanjing R] Paimon Segment Tree Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c;有 m m m 次修改 ( l , r , v ) (l,r,v) (l,r,v)&#xff1a; 对每个 i ∈ [ l , r ] i\in[l,r] i∈[l,r]&#xff0c;令 a i ← a i v a_i\gets a_iv ai​←…

Google Prompt Tuning:文本嵌入优化揭秘

Google Research Prompt Tunin :from_embedded_string 在 Google Research 的 Prompt Tuning 项目代码库 中,from_embedded_string 函数主要用于基于字符串文本初始化提示词的嵌入向量,其调用场景通常与提示词优化或任务适配相关。 1. 核心代码位置 from_embedded_string …

网页 H5 微应用接入钉钉自动登录

ℹ️关于云审批 云审批&#xff08;cloud approve&#xff09; &#xff0c;一款专为小微企业打造&#xff0c;支持多租户的在线审批神器。它简化了申请和审批流程&#xff0c;让您随时随地通过手机或电脑完成请款操作。员工一键提交申请&#xff0c;审批者即时响应&#xff0c…

idea无法识别Maven项目

把.mvn相关都删除了 导致Idea无法识别maven项目 或者 添加导入各个模块 最后把父模块也要导入

飞桨paddle import fluid报错【已解决】

跟着飞桨的安装指南安装了paddle之后 pip install paddlepaddle有一个验证&#xff1a; import paddle.fluid as fluid fluid.install check.run check()报错情况如下&#xff0c;但是我在pip list中&#xff0c;确实看到了paddle安装上了 我import paddle别的包&#xff0c…

现代化SQLite的构建之旅——解析开源项目Limbo

现代化SQLite的构建之旅——解析开源项目Limbo 在当今飞速发展的技术世界中,轻量级且功能强大的数据库已成为开发者的得力助手。当我们谈论轻量级数据库时,SQLite无疑是一个举足轻重的名字。然而,随着技术的进步,我们对数据库的需求也变得更加多样化。这正是Limbo项目诞生…

MinIO:从入门到精通,解锁云原生存储的奥秘

一、引言&#xff1a;为什么 MinIO 正在重塑存储世界&#xff1f; 在云计算和大数据时代&#xff0c;传统存储系统面临扩展性差、成本高、兼容性不足等挑战。MinIO 凭借其 S3 兼容性、分布式架构、高性能存储 等特性&#xff0c;成为企业构建现代化存储基础设施的首选。 本文…

vscode怎么关闭自动定位文件

关闭自动定位文件功能 方式1 在设置中搜索: explorer.autoReveal 方式2 直接在settings.json中增加"explorer.autoReveal": false 添加类似jetbrains IDE的文件定位功能 可以直接安装插件市场搜索niushuaibing.vs-location, 安装后会有文件定位按钮, 点击后即可…