如何使用uv構(gòu)建Python包并本地安裝步驟詳解
前言
本文將逐步指導(dǎo)你創(chuàng)建一個(gè)簡(jiǎn)單的 Python 包,并將其本地安裝到機(jī)器或云環(huán)境中。完成本教程后,你將擁有一個(gè)可復(fù)用的 Python 庫(kù),可直接通過(guò) pip 安裝或在項(xiàng)目中導(dǎo)入使用。

步驟詳解
Step 0: 選擇構(gòu)建工具 - 使用 uv
推薦理由:
uv是類(lèi)似poetry的現(xiàn)代打包工具,默認(rèn)使用hatchling作為構(gòu)建后端,支持 PEP 517/518 標(biāo)準(zhǔn)。安裝方法:
# 通過(guò) Homebrew 安裝(MacOS) brew install uv # 或直接通過(guò) PyPI pip install uv
Step 1: 創(chuàng)建包目錄結(jié)構(gòu)
使用 uv 快速初始化項(xiàng)目結(jié)構(gòu):
uv init --lib my-package
生成后的目錄如下:
my_package/ ├── src/ │ └── my_package/ │ ├── __init__.py # 標(biāo)記為 Python 包 │ └── your_code.py # 存放核心代碼 │ └── py.typed # 類(lèi)型標(biāo)注聲明(可選) ├── pyproject.toml # 項(xiàng)目元數(shù)據(jù)和依賴(lài)配置 ├── README.md # 項(xiàng)目文檔 └── .python-version # 指定 Python 版本
Step 2: 編寫(xiě)包代碼
在 src/my_package/your_code.py 中添加功能代碼:
# my_package/your_code.py
def greet(name: str) -> str:
"""返回問(wèn)候語(yǔ)"""
return f"Hello, {name}!"
Step 3: 配置 pyproject.toml
填寫(xiě)項(xiàng)目元數(shù)據(jù)和依賴(lài)項(xiàng):
[project]
name = "my-package"
version = "0.1.0"
description = "一個(gè)簡(jiǎn)單的本地 Python 包示例"
readme = "README.md"
authors = [{ name = "Sarah Glasmacher", email = "sarah@example.com" }]
requires-python = ">=3.11"
dependencies = []
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
Step 4: 構(gòu)建分發(fā)包
運(yùn)行以下命令生成 .whl 或 .tar.gz 文件:
uv build
構(gòu)建完成后,dist/ 目錄下會(huì)生成類(lèi)似以下的文件:
dist/ ├── my_package-0.1.0-py3-none-any.whl └── my_package-0.1.0.tar.gz
Step 5: 本地安裝包
方法 1:直接安裝構(gòu)建產(chǎn)物
pip install dist/my_package-0.1.0-py3-none-any.whl
方法 2:以編輯模式安裝(實(shí)時(shí)同步代碼)
pip install -e .
Step 6: 測(cè)試安裝
打開(kāi) Python 終端驗(yàn)證:
from my_package.your_code import greet
print(greet("World")) # 輸出:Hello, World!關(guān)鍵注意事項(xiàng)
- 模塊化設(shè)計(jì):將代碼按功能拆分為獨(dú)立模塊,便于維護(hù)和復(fù)用。
- 依賴(lài)管理:通過(guò)
dependencies字段聲明依賴(lài),或使用uv add <package>自動(dòng)更新pyproject.toml。 - 版本控制:每次發(fā)布新版本前更新
version字段,避免沖突。
擴(kuò)展應(yīng)用場(chǎng)景
- 云部署:將打包后的代碼上傳至 Databricks 或 AWS Lambda,直接調(diào)用云端計(jì)算資源。
- 協(xié)作開(kāi)發(fā):通過(guò) PyPI 發(fā)布包(需額外配置),團(tuán)隊(duì)成員可直接
pip install同步代碼。
通過(guò)本文,你已掌握 Python 包的基礎(chǔ)構(gòu)建和本地安裝流程。下一階段可嘗試 將包發(fā)布到 PyPI,實(shí)現(xiàn)全球范圍內(nèi)的代碼共享!
總結(jié)
到此這篇關(guān)于如何使用uv構(gòu)建Python包并本地安裝的文章就介紹到這了,更多相關(guān)uv構(gòu)建Python包并本地安裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在django中使用自定義標(biāo)簽實(shí)現(xiàn)分頁(yè)功能
這篇文章主要介紹了在django中使用自定義標(biāo)簽實(shí)現(xiàn)分頁(yè)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
Python爬蟲(chóng)之urllib基礎(chǔ)用法教程
這篇文章主要為大家詳細(xì)介紹了Python爬蟲(chóng)1.1 urllib基礎(chǔ)用法教程,用于對(duì)Python爬蟲(chóng)技術(shù)進(jìn)行系列文檔講解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
Python將文字轉(zhuǎn)成語(yǔ)音并讀出來(lái)的實(shí)例詳解
今天小編就為大家分享一篇Python將文字轉(zhuǎn)成語(yǔ)音并讀出來(lái)的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
淺談Python中用datetime包進(jìn)行對(duì)時(shí)間的一些操作
下面小編就為大家?guī)?lái)一篇淺談Python中用datetime包進(jìn)行對(duì)時(shí)間的一些操作。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
python的構(gòu)建工具setup.py的方法使用示例
本篇文章主要介紹了python的構(gòu)建工具setup.py的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
python使用pandas實(shí)現(xiàn)篩選功能方式
在數(shù)據(jù)分析的過(guò)程中通常要對(duì)數(shù)據(jù)進(jìn)行清洗與處理,而其中比較重要和常見(jiàn)的操作就有對(duì)數(shù)據(jù)進(jìn)行篩選與查詢(xún),下面這篇文章主要給大家介紹了關(guān)于python使用pandas實(shí)現(xiàn)篩選功能方式的相關(guān)資料,需要的朋友可以參考下2022-06-06
np.meshgrid中的indexing參數(shù)問(wèn)題解決
本文主要介紹了np.meshgrid中的indexing參數(shù)問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
關(guān)于Python中的if __name__ == __main__詳情
在學(xué)習(xí)Python的過(guò)程中發(fā)現(xiàn)即使把if __name__ == ‘__main__’ 去掉,程序還是照樣運(yùn)行。很多小伙伴只知道是這么用的,也沒(méi)有深究具體的作用。這篇文字就來(lái)介紹一下Python中的if __name__ == ‘__main__’的作用,需要的朋友參考下文2021-09-09
Webots下載安裝?+?Pycharm聯(lián)調(diào)使用教程
Webots是一個(gè)開(kāi)源的三維移動(dòng)機(jī)器人模擬器,它最初是作為研究移動(dòng)機(jī)器人中各種控制算法的研究工具開(kāi)發(fā)的,自2018年12月起,Webots作為開(kāi)源軟件發(fā)布,并獲得Apache 2.0許可證,這篇文章主要介紹了Webots下載安裝?+?Pycharm聯(lián)調(diào)?,需要的朋友可以參考下2023-02-02

