Python 新规范 pyproject.toml 完全解析

多谢:thank

Python从PEP 518开始引入的使用pyproject.toml管理项目元数据的方案。

该规范目前已经在很多开源项目中得以支持:

  • Django 这个 Python 生态的顶级项目在 5 个月之前开始使用 pyproject.toml
  • Pytest 这个 Python 生态测试框架的领头羊在 4 个月之前开始使用 pyproject.toml
  • SciPy 这机器学习的库也在 3 周前切到了 pyproject.toml
  • poetry包管理可以直拉生成toml文件

pyproject.toml 实践

工程结构

PyPI 的旧时代的因为规范太松散了,每个项目的结构都五花八门。现在好了,pyproject.toml 它在 Python 项目的结构上都有一个推荐风式了。假设我们软件包的名字是 npts ,那么整个项目的目录结构在推荐的风格下看起来应该像这样。

假设我们软件包的名字是 npts ,那么整个项目的目录结构在推荐的风格下看起来应该像这样。

tree ./ ./ 
├── LICENSE 
├── README.md 
├── pyproject.toml 
├── src 
│ └── npts # src 下面是包名,包下面是业务代码 
│      ├── __init__.py 
|      └── core.py 
└── tests 3 directories, 5 files
3 directories, 5 files

简单地在 src/npts/core.py 加一个函数,模拟我们的业务逻辑。

# -*- coding: utf8 -*- 
def hello(name: str = "world"): return f"hello {name} ."

pyproject.toml

[project] 
name = "npts"
version = "0.0.1" [build-system] 
requires = ["hatchling"] 
build-backend = "hatchling.build"

安装 build 依赖并用 build 来打包

# 安装依赖
python3 -m pip install --upgrade build# 打包
python3 -m build
# ...
#... ... Successfully built npts-0.0.1.tar.gz and npts-0.0.1-py2.py3-none-any.whl
  • 编译过程中,会产生如下的输出信息:

  • 该命令执行完后,会在dist目录中生成如下红框内的文件:

其中,tar.gz文件是源发行版a source distribution ,而.whl文件是构建发行版a built distribution

把打包好的软件包上传到 PyPI

twine upload dist/npts-0.0.1-py3-none-any.whl
或 
poetry -m publish #上传发布

安装包

pip3 install npts

pyproject.toml 完整参数说明

[tool.poetry] # 是最基本的section,然后它由多个 sections 组成name #package 名字,必填
version #package 版本号  ,必填
description #package 描述  ,必填
license #package 许可证,可选
authors #package 作者,必填
maintainers #package 维护者,可选
readme #package readme 文件,可选
README.rst 或 README.md
homepage #package 项目网站的 URL,可选
repository #package 指向项目 repository 的 URL,可选
documentation #package 项目文档的 URL,可选keywords #与 package 相关的关键字列表(最多5个),可选[dependencies] and [dev-dependencies]
# 默认情况下,poetry 会从 Pypi 库中查找依赖项,只需要写名称、版本就行了[tool.poetry.dependencies]
python = "^3.9" # 重点:必须声明与包兼容的python版本 python = "^3.9" 
requests = "^2.26.0"[[tool.poetry.source]] # 使用私有存储库
name = 'private'
url = 'http://example.com/simple'[extras] #支持可选依赖项
...[tool.poetry.dependencies] # 这些软件包是强制性的
mandatory = "^1.0"
psycopg2 = { version = "^2.7", optional = true }    # 可选依赖项列表,可自行选择安装哪些
mysqlclient = { version = "^1.3", optional = true }[tool.poetry.extras] 
mysql = ["mysqlclient"]
pgsql = ["psycopg2"]
当需要安装可选依赖库时
poetry install --extras "mysql pgsql" poetry install -E mysql -E pgsql

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/225122.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧幼儿园视频监管方案及实施建议:AI智能技术构建新引擎

一、背景需求 随着科技的快速发展,智慧化监管已成为幼儿园管理的重要趋势。智慧幼儿园监管解决方案通过引入先进的技术手段,提高幼儿园的管理效率,保障幼儿的安全与健康,为家长提供更便捷的服务。为了保障幼儿的安全,…

【通讯录案例-搭建登录界面 Objective-C语言】

一、来看我们这个通讯录案例 1.接下来啊,我们来做这个通讯录案例, 然后呢,做这么一个应用程序啊, 我们第一步呢,先把界面儿搭了, 然后呢,搭之前,简单的来分析一下, 首先呢,这是,中间儿的这一块儿, 1)有个“账户”、“密码”,这一块儿, 这是一个什么控制器,…

OpenCV与YOLO学习与研究指南

引言 OpenCV是一个开源的计算机视觉和机器学习软件库,而YOLO(You Only Look Once)是一个流行的实时对象检测系统。对于大学生和初学者而言,掌握这两项技术将大大提升他们在图像处理和机器视觉领域的能力。 基础知识储备 在深入…

路由器介绍和命令操作

先来回顾一下上次的内容: ip地址就是由32位二进制数组 二进位数就是只有数字0和1组成 网络位:类似于区号,表示区域作用 主机位:类似于号码,表示区域中编号 网络名称:网络位不变,主机位全为0 …

OpenGL :LearnOpenGL笔记

glfw https://github.com/JoeyDeVries/LearnOpenGL/blob/master/src/1.getting_started/1.1.hello_window/hello_window.cpp #include <glad/glad.h>// 注: GLAD的include文件包含所需的OpenGL头文件(如GL/GL.h) &#xff0c;因此确保在其他需要OpenGL的头文件 (如GLFW…

Java设计模式-适配器模式

目录 一、生活中的适配器例子 二、基本介绍 三、工作原理 四、类适配器模式 &#xff08;一&#xff09;类适配器模式介绍 &#xff08;二&#xff09;应用实例 &#xff08;三&#xff09;类适配器模式注意事项和细节 五、对象适配器模式 &#xff08;一&#xff09…

12.26_黑马数据结构与算法笔记Java

目录 243 图 Floyd Warshall 算法实现2 244 图 Floyd Warshall 算法实现3 245 图 Floyd Warshall 算法实现4 246 图 最小生成树 Prim 247 图 最小生成树 Kruskal 248 图 并查集 1 249 图 并查集 2 250 图 并查集 路径压缩 251 图 并查集 UnionBySize 252 贪心算法 介绍…

【贪心】单源最短路径Python实现

文章目录 [toc]问题描述Dijkstra算法Dijkstra算法的正确性贪心选择性质最优子结构性质 Dijkstra算法应用示例时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;贪心算法 问题描述 给定一个带权有向图 G ( V , E ) G (V , E) G(V,E)&#xff0c;其中每…

uni-app之HelloWorld实现

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

k8s:kubernets

自动部署、自动扩展和管理的容器化部署的应用程序的一个开源系统 k8s负责自动化运维管理多个容器化程序的集群&#xff0c;是一个功能强大的容器编排工具 可以以分布式和集群化的方式进行容器管理 1.18版本&#xff0c;目前最多的是1.20版本&#xff0c;最新的是1.29版本&am…

走进数字金融峰会,为金融科技数字化赋能

12月20—21日&#xff0c;FSIDigital数字金融峰会在上海圆满召开。本次峰会包含InsurDigital数字保险峰会和B&SDigital数字银行与证券峰会2场平行峰会&#xff1b;吸引了近600位来自保险、银行、证券以及金融科技等行业的领导者和专家齐聚一堂&#xff0c;共同探讨金融业数…

Opencv_CUDA实现推理图像前处理与后处理

Opencv_CUDA实现推理图像前处理与后处理 通过trt 或者 openvino部署深度学习算法时&#xff0c;往往会通过opencv的Mat及算法将图像转换为固定的格式作为输入openvino图像的前后处理后边将在单独的文章中写出今晚空闲搜了一些opencv_cuda的使用方法&#xff0c;在此总结一下前…

2023上海国际计算生物学创新大赛——药物筛选AI算法“凌越”挑战赛,等你来战!

作为一门新兴的交叉学科&#xff0c;计算生物学具有巨大的应用潜力和市场价值。近年来&#xff0c;各国高度重视计算生物学的发展&#xff0c;尝试利用计算生物学的方法和技术破解生物医药行业的难题。 为进一步推动计算生物学发展&#xff0c;落实 《上海市计算生物学创新发展…

强化学习_06_pytorch-TD3实践(CarRacing-v2)

0、TD3算法原理简介 详见笔者前一篇实践强化学习_06_pytorch-TD3实践(BipedalWalkerHardcore-v3) 1、CarRacing环境观察及调整 Action SpaceBox([-1. 0. 0.], 1.0, (3,), float32)Observation SpaceBox(0, 255, (96, 96, 3), uint8) 动作空间是[-1~1, 0~1, 0~1]&#xff0c…

PostgreSQL 可观测性最佳实践

简介 软件简述 PostgreSQL 是一种开源的关系型数据库管理系统 (RDBMS)&#xff0c;它提供了许多可观测性选项&#xff0c;以确保数据库的稳定性和可靠性。 可观测性 可观测性&#xff08;Observability&#xff09;是指对数据库状态和操作进行监控和记录&#xff0c;以便在…

深入探讨Java反射:解析机制与应用场景

当谈及Java编程语言的强大功能时&#xff0c;反射&#xff08;Reflection&#xff09;是一个不可忽视的特性。反射允许程序在运行时检查和操作其自身的结构&#xff0c;这为开发者提供了一种动态获取信息和执行操作的途径。在本篇博客中&#xff0c;我们将深入探讨Java反射的原…

vue-awesome-swiper轮播组件

安装版本&#xff1a;"swiper": "^6.0.0", 安装版本&#xff1a;"vue-awesome-swiper": "^4.1.1", <div class"swiper_conter"><swiper class"swiper" :options"swiperOption" ref"mySw…

SpringBoot 3.2.0 基于Spring Security+JWT实现动态鉴权

依赖版本 JDK 17 Spring Boot 3.2.0 Spring Security 6.2.0 工程源码&#xff1a;Gitee 为了能够不需要额外配置就能启动项目&#xff0c;看到配置效果。用例采用模拟数据&#xff0c;可自行修改为对应的ORM操作 编写Spring Security基础配置 导入依赖 <properties>&l…

C#/WPF 播放音频文件

C#播放音频文件的方式&#xff1a; 播放系统事件声音使用System.Media.SoundPlayer播放wav使用MCI Command String多媒体设备程序接口播放mp3&#xff0c;wav&#xff0c;avi等使用WindowsMediaPlayer的COM组件来播放(可视化)使用DirectX播放音频文件使用Speech播放(朗读器&am…

工作实践篇 Flink(一:flink提交jar)

一&#xff1a;参数 flink 模式 – standalone 二&#xff1a;步骤 1. 将本地测试好的代码进行本地运行。确保没问题&#xff0c;进行打包。 2. 找到打好的jar包&#xff0c;将jar包上传到对应的服务器。 3. 执行flink命令&#xff0c;跑代码。 /opt/flink/flink-1.13.6/bi…