【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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82003.shtml
英文地址,請注明出處:http://en.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, 安裝后會有文件定位按鈕, 點擊后即可…