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_vector
和sum_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_vector
和 sum_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}"
},
打包
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 目录。