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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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”,并拖放到白板中双击刚刚拖放到…