vscode uv 發布一個python包:編輯、調試與相對路徑導包

背景

最近一直在使用uv做python包管理,用起來很方便。
尤其是在代碼上傳到github的時候,pyproject.toml 會顯示出當前項目依賴的python包。這樣在把代碼下載到本地之后,直接uv sync就可以很方便地恢復出python環境。

uv 除了有上述優點,直接通過 uv build 就可以把當前代碼給打包成whl文件,上傳到pypi,或者自己本地安裝。

下述用一個例子介紹python打包。

項目詳情

這是 vector_pkag 項目結構。

vector_pkag
├── pyproject.toml
├── README.md
├── src
│   └── vector_pkag
│       ├── init_vector.py
│       ├── sum_vector.py
│       └── vector_base.py
└── tests└── test_vector.py

整個項目完整的代碼,已經上傳到githun: https://github.com/JieShenAI/csdn/tree/main/25/08/vector_pkag

建議把包相關的代碼代碼都放到src目錄下。init_vectorsum_vector是兩個工具,里面實現的代碼并不重要,只需要知道 vector_base調用了這兩個工具就行。

vector_base.py的具體實現如下:

from dataclasses import dataclassfrom .init_vector import init_vector as init_v
from vector_pkag.sum_vector import sum_vector as sum_v@dataclass
class Vector:x : inty : intdef add(self, other):self.x += other.xself.y += other.ydef __repr__(self):return f"Vector({self.x}, {self.y})"def init_vector(self):return init_v(self)def sum_vector(self)->int:return sum_v(self) 

init_vectorsum_vector 在同一個目錄下,采用兩種不同的方式進行導包,是為了說明這兩種方式都可以寫。

from .init_vector import init_vector as init_v
from vector_pkag.sum_vector import sum_vector as sum_v

包的測試

我們的包的代碼,都在src目錄下,在這個包還沒有發布的時候,需要對包內的模型寫測試。
我們需要在vscode的 settings.json 文件中,添加上配置信息,實現把每個項目的根目錄和src文件夾都添加到python path路徑中。

這樣就可以保證tests內部的測試代碼與包發布后的代碼保持一致。

test/test_vectory.py的實現如下:
即使內部的文件夾中,也可以直接導入 vector_pkag。

from vector_pkag.vector_base import Vectorv = Vector(1, 2)print(v.sum_vector())print(v.init_vector())print(v.sum_vector())

vscode 的 settings.json

ctrl+shift+p,然后在搜索框中搜索 settings,就可以搜索到該json文件。

在vscode的settings.json添加下述配置項。

// 用于代碼自動補全的路徑
"python.autoComplete.extraPaths": ["${workspaceFolder}"],
// 用于語言服務分析(語法檢查、跳轉等)的路徑
"python.analysis.extraPaths": ["${workspaceFolder}"],
// 終端中生效的 PYTHONPATH(可選,確保終端運行時也能識別)
"terminal.integrated.env.windows": {"PYTHONPATH": "${workspaceFolder}/src;${workspaceFolder};${env:PYTHONPATH}"
},
"terminal.integrated.env.osx": {"PYTHONPATH": "${workspaceFolder}/src:${workspaceFolder}:${env:PYTHONPATH}"
},
"terminal.integrated.env.linux": {"PYTHONPATH": "${workspaceFolder}/src:${workspaceFolder}:${env:PYTHONPATH}"
},

進行上述設置后,只有在py文件中才有效。在jupyter文件,卻沒有把項目文件夾地址和src地址添加到sys.path中。

.env

PYTHONPATH=${workspaceFolder}/src:${workspaceFolder}:${PYTHONPATH}

在settings.json 添加下述配置,這樣jupyter也可以設置成功:

"python.envFile": "${workspaceFolder}/.env",
"jupyter.envFile": "${workspaceFolder}/.env"

打包

uv 打包很方便,運行下述命令即可。

uv build

會打包成whl文件

dist
├── vector_pkag-0.1.0-py3-none-any.whl
└── vector_pkag-0.1.0.tar.gz

uv 安裝對應的whl文件

把 vector_pkag-0.1.0-py3-none-any.whl 拷貝到另外一個需要裝包的uv項目pkags目錄下。
再運行下述命令進行裝包

uv add pkags/vector_pkag-0.1.0-py3-none-any.whl

需要裝包的uv項目的 pyproject.toml 詳情如下:

[project]
name = "test"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = ["vector-pkag",
][tool.uv.sources]
vector-pkag = { path = "pkags/vector_pkag-0.1.0-py3-none-any.whl" }[[tool.uv.index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
default = true

上面顯示了當前uv項目安裝了 vector-pkag,該包來自 pkags 目錄。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93002.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93002.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93002.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Secure 第四天作業

實驗需求:需求一拓撲:按照以上拓撲所示,完成以下需求:參考以上拓撲,配置設備IP地址,使用UNL里Secure第四天拓撲即可。(有興趣的同學課后也可按照PPT原拓撲做做實驗);配置…

利用開漏輸出模式模擬IIC

/************************************************************利用IO口模擬IIC時序,需要使用2個IO口(SDA和SCL)SCL時鐘線只能由主器件進行控制,所以SCL引腳必須為輸出模式SDA數據線,在主器件發送數據時,SDA引腳為輸出模式SDA數…

閘機控制系統從設計到實現全解析:第 5 篇:RabbitMQ 消息隊列與閘機通信設計

第 5 篇:RabbitMQ 消息隊列與閘機通信設計RabbitMQ 是一款開源的消息隊列中間件(Message Queue,MQ),基于 Erlang 語言開發,遵循 AMQP(Advanced Message Queuing Protocol,高級消息隊…

Linux 常用命令大全:覆蓋日常 99% 操作需求

1、基本命令 pwd:顯示當前工作目錄的絕對路徑,例如在復雜目錄結構中快速確認位置,執行后會輸出類似/home/user/documents的結果。 cd:切換目錄,cd 目錄路徑可進入指定目錄,cd ~回到當前用戶的家目錄&…

普通電腦與云電腦的區別有哪些?全面科普

近年來,越來越多的人不再購置升級自己的電腦,轉而選擇云電腦,云端產品正在變得越來越普及易用。那么它究竟跟我們的普通本地設備有什么區別吶?或許很多人并不知悉,對此,本篇內容小編就為大家簡要科普一下普…

【Python】支持向量機SVM

示例代碼:import numpy as np import matplotlib.pyplot as plt from sklearn import svm from sklearn.datasets import make_blobs from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, classification_report# 設…

當AI學會“抄近路”:殘差網絡如何突破深度學習的極限

**——解讀《Deep Residual Learning for Image Recognition》**今天我想帶大家回到2015年,見證人工智能領域的一場“捷徑革命”——由何愷明等人提出的**深度殘差學習框架(ResNet)**。這篇論文解決了困擾AI界多年的“深度詛咒”,…

HCIP--BGP綜合實驗

目錄 BGP綜合實驗報告 一、實驗拓撲 二、實驗要求 三、實驗思路 (一)IP地址規劃 (二)整體思路 四、實驗步驟 (一) IP地址配置 (二) AS2內部配置OSPF協議 (三&a…

Java 基礎編程案例:從輸入交互到邏輯處理

在Java編程學習中,輸入輸出、循環控制和邏輯判斷是核心基礎。本文整理了10個經典案例,涵蓋Scanner輸入處理、斐波那契數列、成績統計、登錄驗證等場景,幫助初學者掌握編程邏輯與實用技巧。 一、Scanner輸入交互:獲取用戶輸入并處理…

LeetCode 面試經典 150_數組/字符串_整數轉羅馬數字(18_12_C++_中等)(模擬)(對各位進行拆解)

LeetCode 面試經典 150_數組/字符串_整數轉羅馬數字(18_12_C_中等)題目描述:輸入輸出樣例:題解:解題思路:思路一(模擬):思路二(對各位進行拆解)&a…

計算機網絡摘星題庫800題筆記 第6章 應用層

第6章 應用層 6.1 網絡應用的架構 考點 1 CS 架構 題組闖關 1.DNS 是基于 ( ) 模式的分布式系統。 A. C/S B. B/S C. P2P D. 以上均不正確 1.【參考答案】A 【解析】本題考查網絡應用模型。 DNS 作為分布式應用,是一種典型的 C/S 模式,是隨著 Internet 技…

BLUCK電路的輸入電容應該怎么選取

借用TI的BULK芯片討論一下輸入電容怎么選取的問題,BULK電源是我們常用的電源,它的原理請看之前的文章: 高壓差為何不用LDO?DCDC效率更高!-CSDN博客 本文我們探討一下輸入電容,輸入電容是控制紋波的關鍵&a…

CAN仲裁機制的原理

我們來詳細講 CAN 仲裁機制 的原理和工作方式,這是 CAN 總線最核心的特性之一。 1?? 基本概念 CAN 總線是 多主機、多節點的串行總線,所有節點共享一根差分信號線(CAN_H / CAN_L)。 每個節點都可以隨時發送消息(多主機機制) 總線只能同時有一個節點成功發送 仲裁 用…

【GPT入門】第46課 vllm安裝、部署與使用

【GPT入門】第46課 vllm安裝、部署與使用 1.準備服務器 2. 安裝 conda環境,隔離base環境 3. vllm使用 3.1 在線推理, openai兼容服務器 3.2 模型離線調用 4. 沒有使用GPU問題分析 1.準備服務器 cuda 版本選12.1 vllm官網介紹: https://vllm.hyper.ai/docs/getting-started/…

【從網絡基礎到實戰】理解TCP/IP協議體系的核心要點(包含ARP協議等其他協議介紹)

前言: 學習計算機網絡不僅是軟件開發的基礎功,更是成為一名合格后端工程師、網絡工程師的重要門檻。本文將基于 TCP/IP 協議體系,系統梳理網絡層、數據鏈路層、以及相關協議的核心知識,并結合實際案例與代碼示例幫助理解。一、網絡…

Python 元類基礎:從理解到應用的深度解析

在 Python 的高級編程中,元類(metaclass) 無疑是最神秘又最強大的特性之一。它不僅是構建類的“工廠”,更是 Python 靈活對象模型的體現。本文將帶你從基礎概念入手,深入理解元類的本質、工作機制以及實際應用&#xf…

Nginx 配置代理服務器的詳細方法

一、什么是代理服務器? 類型說明正向代理客戶端通過代理訪問目標服務器(隱藏客戶端身份)反向代理客戶端訪問代理服務器,由代理服務器請求后端服務器(隱藏后端服務器) 二、Nginx 反向代理配置方法&#xff…

Lombok插件介紹及安裝(Eclipse)

一、Lombok 的用途 Lombok是一個 Java 庫,通過注解的方式簡化 Java 代碼的編寫。它能夠自動生成常見的代碼,如getter、setter、toString、equals、hashCode等方法,從而減少樣板代碼,使代碼更加簡潔、易讀。 Lombok 通過添加**Dat…

硬核操作!Go 語言生成 “會爬墻的清潔機器人”,玻璃外墻自己擦

本文聚焦于利用 Go 語言開發 “會爬墻的清潔機器人” 這一硬核技術,圍繞該機器人如何實現玻璃外墻自主清潔展開。首先介紹開發背景與需求,接著闡述 Go 語言在其中的優勢,詳細講解機器人的核心技術,包括吸附系統、運動控制、清潔機…

Qt——實現”Hello World“、認識對象樹與Qt坐標系

在創建項目時,使用的基類Base Class為QWidget 1. 使用圖形化界面的方式實現“Hello World” 雙擊文件:widget.ui,進入designer模式:在“控件盒子”的“Display Widgets”中找到“Label”,并拖放到白板中雙擊剛剛拖放到…