当前位置: 首页 > news >正文

现代Python打包工具链

现代Python打包工具如Poetry、Flit和Hatch提供了更简单、更强大的方式来管理项目依赖和打包流程。下面我将通过具体示例详细介绍这三种工具。
1. Poetry - 全功能依赖管理工具
Poetry是最流行的现代Python项目管理工具之一,它集依赖管理、虚拟环境管理和打包发布于一体。
典型项目结构

my_poetry_project/
├── pyproject.toml
├── README.md
├── src/
│   └── my_package/
│       ├── __init__.py
│       └── module.py
└── tests/

pyproject.toml 示例

[tool.poetry]
name = "my-poetry-project"
version = "0.1.0"
description = "A project managed by Poetry"
authors = ["Your Name <you@example.com>"]
license = "MIT"
readme = "README.md"[tool.poetry.dependencies]
python = "^3.8"
requests = "^2.26.0"
numpy = { version = "^1.21.0", optional = true }[tool.poetry.dev-dependencies]
pytest = "^6.2.0"
black = "^21.0"
mypy = "^0.910"[tool.poetry.extras]
full = ["numpy"][tool.poetry.scripts]
mycli = "my_package.cli:main"[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

常用命令

# 初始化新项目
poetry new my-project# 添加依赖
poetry add requests
poetry add --dev pytest# 安装所有依赖
poetry install# 安装带可选依赖
poetry install --extras "full"# 运行命令
poetry run python -m pytest# 构建包
poetry build# 发布到PyPI
poetry publish

2. Flit - 简单项目的轻量级工具
Flit专注于简化小型包的发布流程,特别适合单模块包。
典型项目结构

my_flit_project/
├── pyproject.toml
├── README.md
└── my_module.py  # 或 src/目录结构

pyproject.toml 示例

[build-system]
requires = ["flit_core>=3.2"]
build-backend = "flit_core.buildapi"[project]
name = "my-flit-module"
authors = [{name = "Your Name", email = "you@example.com"},
]
version = "0.1.0"
description = "A simple module packaged with Flit"
requires-python = ">=3.6"
classifiers = ["License :: OSI Approved :: MIT License",
]
dependencies = ["requests>=2.25.0",
][project.optional-dependencies]
test = ["pytest>=6.0","pytest-cov>=2.0",
][project.urls]
Homepage = "https://example.com"

常用命令

# 初始化项目(交互式)
flit init# 构建包
flit build# 发布到PyPI
flit publish# 安装开发模式
flit install --symlink

3. Hatch - 新一代项目管理工具
Hatch是一个相对较新但功能强大的工具,提供了统一的项目管理和构建体验。
典型项目结构

my_hatch_project/
├── pyproject.toml
├── README.md
├── src/
│   └── my_package/
│       ├── __init__.py
│       └── module.py
└── tests/

pyproject.toml 示例

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"[project]
name = "my-hatch-project"
version = "0.1.0"
description = "A project managed by Hatch"
authors = [{ name="Your Name", email="you@example.com" },
]
readme = "README.md"
requires-python = ">=3.7"
license = "MIT"
keywords = ["example", "hatch"]
classifiers = ["Development Status :: 3 - Alpha","Intended Audience :: Developers",
]dependencies = ["click>=8.0.0","rich>=10.0.0",
][project.optional-dependencies]
dev = ["pytest>=6.0","pytest-mock>=3.0",
]
test = ["coverage>=5.0",
][project.scripts]
myapp = "my_package.cli:main"[tool.hatch.envs.default]
dependencies = ["pytest","pytest-cov",
]

常用命令

# 创建新项目
hatch new my-project# 添加依赖
hatch env add python=3.9# 运行测试
hatch run test# 构建包
hatch build# 发布包
hatch publish# 版本管理
hatch version  # 显示当前版本
hatch version patch  # 升级补丁版本
hatch version minor  # 升级次版本

工具对比
特性
Poetry
Flit
Hatch
依赖管理



虚拟环境管理



版本管理



复杂项目支持



单文件项目支持



构建系统



发布到PyPI



多环境支持
有限


插件系统



选择建议
1. 选择Poetry如果:
◦ 你需要完整的依赖管理解决方案
◦ 项目有复杂的依赖关系
◦ 需要与现有工具链良好集成
2. 选择Flit如果:
◦ 你的项目非常简单(特别是单文件模块)
◦ 你想要最简化的配置
◦ 你不需要虚拟环境管理
3. 选择Hatch如果:
◦ 你想要最新的工具和功能
◦ 需要强大的环境管理
◦ 项目可能有多种配置或构建变体
这些现代工具都使用pyproject.toml作为配置文件,符合PEP 517和PEP 518标准,使得项目更容易在不同工具间迁移。

相关文章:

现代Python打包工具链

现代Python打包工具如Poetry、Flit和Hatch提供了更简单、更强大的方式来管理项目依赖和打包流程。下面我将通过具体示例详细介绍这三种工具。 1. Poetry - 全功能依赖管理工具 Poetry是最流行的现代Python项目管理工具之一&#xff0c;它集依赖管理、虚拟环境管理和打包发布于一…...

(done) 吴恩达版提示词工程 8. 聊天机器人 (聊天格式设计,上下文内容,点餐机器人)

视频&#xff1a;https://www.bilibili.com/video/BV1Z14y1Z7LJ/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 别人的笔记&#xff1a;https://zhuanlan.zhihu.com/p/626966526 8. 聊天机器人&#xff08;Chatbot&#xff09; …...

Maven概述

1.maven是什么&#xff1f; Maven 是一个基于项目对象模型&#xff08;Project Object Model&#xff0c;POM&#xff09;概念的项目构建工具&#xff0c;主要用于 Java 项目的构建、依赖管理和项目信息管理。&#xff08;跨平台的项目管理工具&#xff0c;用于构建和管理任何…...

SKLearn - Biclustering

文章目录 Biclustering &#xff08;双聚类&#xff09;谱二分聚类算法演示生成样本数据拟合 SpectralBiclustering绘制结果 Spectral Co-Clustering 算法演示使用光谱协同聚类算法进行文档的二分聚类 Biclustering &#xff08;双聚类&#xff09; 关于双聚类技术的示例。 谱…...

使用c++实现一个简易的量子计算,并向外提供服务

实现一个简易的量子计算模拟器并提供服务是一个相对复杂的过程&#xff0c;涉及到量子计算的基本概念、C编程以及网络服务的搭建。以下是一个简化的步骤指南&#xff0c;帮助你开始这个项目&#xff1a; 步骤 1: 理解量子计算基础 在开始编码之前&#xff0c;你需要对量子计算…...

京东攻防岗位春招面试题

围绕电商场景&#xff0c;以下是5道具有代表性的技术面试题及其解析&#xff0c;覆盖供应链、电商大促、红蓝对抗等场景。 《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?…...

Kafka批量消费部分处理成功时的手动提交方案

Kafka批量消费部分处理成功时的手动提交方案 当使用Kafka批量消费时&#xff0c;如果500条消息中只有部分处理成功&#xff0c;需要谨慎处理偏移量提交以避免消息丢失或重复消费。以下是几种处理方案示例&#xff1a; 方案1&#xff1a;记录成功消息并提交最后成功偏移量 Co…...

消息中间件

零、文章目录 消息中间件 1、中间件 &#xff08;1&#xff09;概述 中间件&#xff08;Middleware&#xff09;是位于操作系统、网络与数据库之上&#xff0c;应用软件之下的一层独立软件或服务程序&#xff0c;其核心作用是连接不同系统、屏蔽底层差异&#xff0c;并为应…...

vue3直接操作微信小程序云开发数据库,web网页对云数据库进行增删改查

我们开发好小程序以后&#xff0c;有时候需要编写一个管理后台网页对数据库进行管理&#xff0c;之前我们只能借助云开发自带的cms网页&#xff0c;但是cms网页设计的比较丑&#xff0c;工作量和代码量也不够&#xff0c;所以我们今天就来带大家实现用vue3编写管理后台直接管理…...

重塑编程体验边界:明基RD280U显示器深度体验

重塑编程体验边界&#xff1a;明基RD280U显示器深度体验 写在前面 本文将以明基RD280U为核心&#xff0c;通过技术解析、实战体验与创新案例&#xff0c;揭示专业显示器如何重构开发者的数字工作台。 前言&#xff1a;当像素成为生产力的催化剂 在GitHub的年度开发者调查中&…...

Linux命令-iostat

iostat 命令介绍 iostat 是一个用于监控 Linux 系统输入/输出设备加载情况的工具。它可以显示 CPU 的使用情况以及设备和分区的输入/输出统计信息&#xff0c;对于诊断系统性能瓶颈&#xff08;如磁盘或网络活动缓慢&#xff09;特别有用。 语法&#xff1a; iostat [options…...

Hyper-V安装Win10系统,报错“No operating system was loaded“

环境&#xff1a; Win10专业版 Hyper-V 问题描述&#xff1a; Hyper-V安装Win10系统&#xff0c;报错"No operating system was loaded" 已挂载ISO但仍无法启动的深度解决方案​​ &#x1f527;如果已确认ISO正确挂载且启动顺序已调整&#xff0c;但虚拟机仍提…...

Zabbix

zabbix官网: https://www.zabbix.com zabbix中文操作手册&#xff1a;https://www.zabbix.com/documentation/5.0/zh/manual/introduction/features 1、SERVER Zabbix server 是 Zabbix 软件的核心组件。Zabbix Agent 向Zabbix server报告可用性、系统完整性信息和统计信息。…...

NEPCON China 2025 | 具身智能时代来临,灵途科技助力人形机器人“感知升级”

4月22日至24日&#xff0c;生产设备暨微电子工业展&#xff08;NEPCON China 2025&#xff09;在上海如期开展。本届展会重磅推出“人形机器人拆解展区”&#xff0c;汇聚35家具身智能产业链领军企业&#xff0c;围绕机械结构、传感器布局、驱动系统与AI算法的落地应用&#xf…...

css响应式布局设置子元素高度和宽度一样

css响应式布局设置子元素高度和宽度一样 常常遇到响应式布局 其中父元素&#xff08;类名为.list&#xff09;包含多个子元素&#xff08;类名为.item&#xff09;&#xff0c;每个子元素中显示一张图片&#xff0c;并且这些图片能够根据子元素的宽度和高度进行自适应调整。 …...

【AI论文】RefVNLI:迈向可扩展的主题驱动文本到图像生成评估

摘要&#xff1a;主题驱动的文本到图像&#xff08;T2I&#xff09;生成旨在生成与给定文本描述一致的图像&#xff0c;同时保留参考主题图像的视觉特征。 尽管该领域具有广泛的下游适用性——从增强图像生成的个性化到视频渲染中一致的角色表示——但该领域的进展受到缺乏可靠…...

信创系统 sudoers 权限配置实战!从小白到高手

好文链接&#xff1a;实战&#xff01;银河麒麟 KYSEC 安全中心执行控制高级配置指南 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于信创终端操作系统中 sudoers 文件详解的实用文章&#xff01;在 Linux 系统中&#xff0c;sudo 是一项非常重要的权限控制机制…...

用户行为检测技术解析:从请求头到流量模式的对抗与防御

用户行为检测是反爬机制的核心环节&#xff0c;网站通过分析请求特征、交互轨迹和时间模式&#xff0c;识别异常流量并阻断爬虫。本文从基础特征检测与高级策略分析两个维度&#xff0c;深入解析用户行为检测的技术原理与对抗方案。 一、基础特征检测&#xff1a;请求头与交互…...

关于Android Studio的AndroidManifest.xml的详解

AndroidManifest.xml 是 Android 项目的核心配置文件&#xff0c;它定义了应用的基本信息、所需权限、组件、功能等。它为 Android 系统提供了关于应用如何运行的重要信息。每个 Android 应用程序必须包含这个文件&#xff0c;而且这个文件的配置直接影响到应用的行为和安装要求…...

​​全栈自动化:从零构建智能CI/CD流水线​

1. 基础架构&#xff1a;GitLab Kubernetes​​ ​​1.1 GitLab CI/CD核心配置​​ GitLab通过.gitlab-ci.yml定义流水线阶段。以下是一个基础模板&#xff1a; stages:- build- test- deploybuild_job:stage: buildscript:- echo "Compiling the code..."- make…...

xe-upload上传文件插件

1.xe-upload地址&#xff1a;文件选择、文件上传组件&#xff08;图片&#xff0c;视频&#xff0c;文件等&#xff09; - DCloud 插件市场 2.由于开发app要用到上传文件组件&#xff0c;uni.chooseFile在app上不兼容&#xff0c;所以找到了xe-upload&#xff0c;兼容性很强&a…...

PySpark中DataFrame应用升阶及UDF使用

目录 1. 加载数据2. 列常见操作2.1 添加新列2.2 重命名列2.3 删除指定列2.4 修改数据 3 空值处理3.1 丢弃空值3.2 空值填充 4 聚合操作4.1 分组聚合 5 用户自定义函数&#xff08;UDF&#xff09;5.1 传统UDF函数5.2 Pandas UDF&#xff08;向量化UDF&#xff09; 参考资料 imp…...

C++ ——引用

引用定义 引用是一个已存在的变量的别名。 用法 类型 & 别名 引用指向的变量名 关于别名的理解&#xff1a; 别名可以理解为绰号或者小名&#xff0c;比如美猴王、齐天大圣、斗战胜佛等&#xff0c;指的都是孙悟空。 这意味着&#xff1a; ①别名和别名指向的变量其实是同…...

OpenCV 图形API(65)图像结构分析和形状描述符------拟合二维点集的直线函数 fitLine2D()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 拟合一条直线到2D点集。 该函数通过最小化 ∑ i ρ ( r i ) \sum_i \rho(r_i) ∑i​ρ(ri​)来将一条直线拟合到2D点集&#xff0c;其中 ri 是第…...

k8s生成StarRocks集群模版

集群由1个fe3个be组成&#xff0c;满足以下要求&#xff1a; 1、由3个pod组成&#xff0c;每pod分配2c4g 2、第一个pod里有一个be与一个fe&#xff0c;同在一个容器里&#xff0c;fe配置jvm内存设置为1024mb&#xff0c;be的jvm内存设置为1024MB 3、第二第三个pod里分别有一…...

web基础+HTTP+HTML+apache

目录 一.web基础 1.1web是什么 1.2HTTP 1.2.1HTTP的定义 1.2.2 HTTP请求过程 1.2.3 HTTP报文 1 请求报文 2 响应报文 1.2.4 HTTP协议状态码 1.2.5 HTTP方法 1.2.6 HTTP协议版本 二.HTML CSS和JavaScript 2.1HTML 2.1.1HTML的概述 2.1.2 HTML中的部分基本标签&…...

C++修炼:list模拟实现

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 欢迎点赞&#xff0c;关注&am…...

Lua 第12部分 日期和时间

Lua 语言的标准库提供了两个用于操作日期和时间的函数&#xff0c;这两个函数在 C 语言标准库中也存在&#xff0c;提供的是同样的功能。 虽然这两个函数看上去很简单&#xff0c;但依旧可以基于这些简单的功能完成很多复杂的工作。 Lua 语言针对日期和时间使用两种表示方式。 …...

NL2SQL调研

一 背景 1.1 引言 随着数据时代的到来&#xff0c;数据库已成为企业和组织存储、管理和分析数据的核心基础设施。然而&#xff0c;传统的数据库查询需要使用结构化查询语言&#xff08;SQL&#xff09;&#xff0c;这要求用户具备特定的技术知识&#xff0c;限制了数据库的广…...

服务器ubuntu镜像磁盘空间怎么管理

在 Ubuntu 服务器上&#xff0c;管理镜像磁盘空间是系统维护中的一项关键任务&#xff0c;尤其是在使用虚拟化技术时(如 Docker、LVM、KVM 等)。合理管理磁盘空间可以有效防止磁盘空间不足&#xff0c;提升系统的稳定性和性能。本文将为你介绍如何在 Ubuntu 系统中有效管理镜像…...

uniapp+vue3表格样式

<view class"tableMain" v-if"state.use_scope2"><view class"tableBox"><view class"th"><view class"col">站点名称</view><view class"col">站点状态</view><vi…...

QT中的文件操作

C语言中通过fopen/fread/fwrite/fclose进行文件操作 C中通过fstream/>>/<</close进行文件操作 Linux中通过open/read/write/clos进行文件操作 Qt中同样可以使用上述文件操作 但是Qt同样封装了自己的一套文件操作&#xff0c;&#xff0c;在编写Qt程序时&#xf…...

Vue.js 核心特性解析:响应式原理与组合式API实践

引言 Vue.js 作为一款渐进式前端框架&#xff0c;凭借其简洁的API设计和灵活的组件化开发模式&#xff0c;已经成为现代Web开发的主流选择之一。本文将深入探讨Vue 3的核心特性&#xff0c;包括响应式系统原理、组合式API的使用以及实际开发中的最佳实践&#xff0c;帮助开发者…...

李沐动手深度学习(pycharm中运行笔记)——07.自动求导

07.自动求导&#xff08;与课程对应&#xff09; 1、导入torch import torch 2、假设我们想对函数 y 2x.Tx&#xff0c;就是 2乘x的内积&#xff0c;关于列向量x求导&#xff0c;也就是4x x torch.arange(4.0) # &#xff08;1&#xff09;创建一个列向量 x print("…...

Maven 使用教程

Maven 使用教程 Maven 是一个强大的项目管理和构建工具&#xff0c;主要用于 Java 项目的开发。它通过定义良好的生命周期、插件系统和依赖管理简化了项目的构建过程。本文将详细介绍如何使用 Maven 来进行日常的开发工作。 安装 Maven 下载 Maven 访问 Maven 的官方网站&a…...

ACM会议模板设置单排作者数量

在准备ACM会议的ready版本时涉及到作者设置&#xff0c;ACM会议模板的默认设置是每排三个作者&#xff0c;但是修改为四个一般是可以允许的&#xff0c;可能会节省一些空间。只需要在\documentclass[sigconf,authordraft]{acmart}后面添加代码\settopmatter{authorsperrow4}&am…...

云原生 | K8S中数据存储之StorageClass

在一个大规模的Kubernetes集群里,可能有成千上万个PVC,这就意味着运维人员必须实现创建出这个多个 PV,此外,随着项目的需要,会有新的PVC不断被提交,那么运维人员就需要不断的添加新的,满足要求的PV,否 则新的Pod就会因为PVC绑定不到PV而导致创建失败。而且通过 PVC 请求到一定的…...

衡量矩阵数值稳定性的关键指标:矩阵的条件数

文章目录 1. 定义2. 为什么要定义条件数&#xff1f;2.1 分析线性系统 A ( x Δ x ) b Δ b A(x \Delta x) b \Delta b A(xΔx)bΔb2.2 分析线性系统 ( A Δ A ) ( x Δ x ) b (A \Delta A)(x \Delta x) b (AΔA)(xΔx)b2.3 定义矩阵的条件数 3. 性质及几何意义3…...

蓝桥杯 1. 确定字符串是否包含唯一字符

确定字符串是否包含唯一字符 原题目链接 题目描述 实现一个算法来识别一个字符串的字符是否是唯一的&#xff08;忽略字母大小写&#xff09;。 若唯一&#xff0c;则输出 YES&#xff0c;否则输出 NO。 输入描述 输入一行字符串&#xff0c;长度不超过 100。 输出描述 输…...

【Vue】单元测试(Jest/Vue Test Utils)

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Vue 文章目录 1. Vue 单元测试简介1.1 为什么需要单元测试1.2 测试工具介绍 2. 环境搭建2.1 安装依赖2.2 配置 Jest 3. 编写第一个测试3.1 组件示例3.2 编写测试用例3.3 运行测试 4. Vue Test Utils 核心 API4.1 挂载组件4.2 常…...

查回来的数据除了 id,其他字段都是 null

数据结构不完整&#xff1a;您收到的历史对话和知识库文件数据中&#xff0c;几乎所有重要的字段&#xff08;除了id和title&#xff09;都是null&#xff0c;包括userId、createdTime等关键字段。这会导致前端无法根据创建时间来正确分类显示&#xff08;今天、7天内、更早&am…...

Flink02-学习-套接字分词

flatmap() AMapFunction仅适用于执行一对一转换的情况&#xff1a;对于每个进入的流元素&#xff0c;map()都会发出一个转换后的元素。否则&#xff0c;您需要使用 flatmap() DataStream<TaxiRide> rides env.addSource(new TaxiRideSource(...));DataStream<Enric…...

html5:从零构建经典游戏-扫雷游戏

扫雷是Windows系统自带的经典游戏&#xff0c;陪伴了许多人的童年。 本文将详细解析一个用HTML、CSS和JavaScript实现的扫雷游戏代码&#xff0c;带你了解其背后的实现原理。 游戏概述 这个扫雷游戏实现包含以下核心功能&#xff1a; 1010的游戏棋盘 15个随机分布的地雷 左…...

SVT-AV1源码分析-函数svt_aom_motion_estimation_kernel

一 svt_aom_motion_estimation_kernel函数作用 这段代码是EBSDK 中的一个运动估计 内核函数&#xff0c;用于处理视频编码中的运动估计任务。运动估计任务。运动估计是视频编码中的一个关键步骤&#xff0c;目的是在时间域上找到当前块在参考帧中的最佳匹配块&#xff0c;从而减…...

考研系列-计算机组成原理第六章、总线

一、总线概述 1.总线的基本概念 2.总线的分类 (1)按照传输格式 并行总线的传输速度并不一定比串行总线快,因为并行总线之间存在干扰,不能太快。 (2)按照总线功能 片内总线、系统总线、IO总线、通信总线...

HTML基础完全解析

一、HTML基本结构解析 1.1 文档骨架 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>文档标题</title> </head> <body>页面主体内容 </body> </html> &#x1f3…...

【读写视频】MATLAB详细代码

MATLAB将视频逐帧输出 在MATLAB中&#xff0c;可以使用VideoReader和imwrite函数将视频逐帧输出为图像文件。以下是具体步骤和示例代码&#xff1a; 读取视频并逐帧保存为图像 首先&#xff0c;使用VideoReader函数读取视频文件&#xff0c;然后使用read函数逐帧读取视频&am…...

NCCL 通信与调试

代码仓库 https://github.com/NVIDIA/nccl-tests 代码编译 编译 nccl-tests (MPI 版本): ” 编译支持 MPI 的 nccl-tests 是整合 nvcc, mpicc 和 NCCL 库的关键步骤 初始编译命令 (基于 README): cd /path/to/your/nccl-tests # 进入源码目录 make clean make MPI1 CUDA_HO…...

Linux 在个人家目录下添加环境变量 如FLINK_PROPERTIES=“jobmanager.rpc.address: jobmanager“

问题&#xff1a; Docker Flink Application Mode 命令行形式部署前&#xff0c;需要在Linux执行以下&#xff1a; $ FLINK_PROPERTIES"jobmanager.rpc.address: jobmanager" $ docker network create flink-network 临时变量只在当前session会话窗口生效&#xf…...

Linux中线程池的简单实现 -- 线程安全的日志模块,策略模式,线程池的封装设计,单例模式,饿汉式单例模式,懒汉式单例模式

目录 1. 对线程池的理解 1.1 基本概念 1.2 工作原理 1.3 线程池的优点 2. 日志与策略模式 2.1 日志认识 2.2 策略模式 2.2.1 策略模式的概念 2.2.2 工作原理 2.2 自定义日志系统的实现 3. 线程池设计 3.1 简单线程池的设计 3.2 线程安全的单例模式线程池的设计 3…...