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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS4.0系统性深入开发04UIAbility组件详解(下)

UIAbility组件间交互(设备内) UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,该UIAbility可以是应用内的其他UIAbility,也可以是其他应用的UIAbility(例如启…

java练习题之接口interface练习

1:关于接口和抽象类,下列说法正确的是(ACD) A.抽象类可以有构造方法,接口没有构造方法 B.抽象类可以有属性,接口没有属性 C.抽象类可以有非抽象方法,接口中都是抽象方法 1.8之后 D.抽象类和接…

比亚迪重磅来袭,汽车圈又要大动干戈?

12月15日,我盼望已久的新车————宋L正式登场! 作为一直关注比亚迪的车主,这款新SUV一直处于我的观测范围内。终于在前几日,比亚迪宣布它将于12月15日上市,这对我来说无疑是个好消息。当我了解到宋L将推出后驱和四驱…

【Unity6.0+AI】Unity版的Pytorch之Sentis-把大模型植入Unity

本教程详细讲解什么Sentis。以及恶补一些人工智能神经网络的基础概念,概述了基本流程,加载模型、输入内容到模型、使用GPU让模型推理数据、输出数据。 官方文档 Unity Sentis: Use AI models in Unity Runtime | Unity 主页介绍 官方文档链接:Sentis overview | Sentis | 1…

挑战Python100题(6)

100+ Python challenging programming exercises 6 Question 51 Define a class named American and its subclass NewYorker. Hints: Use class Subclass(ParentClass) to define a subclass. 定义一个名为American的类及其子类NewYorker。 提示:使用class Subclass(Paren…

Scala安装

Scala安装使用 windows安装,配置环境变量 以下载Scala2.11为例,操作在Windows中安装Scala。 官网下载scala2.11:All Available Versions | The Scala Programming Language下载好后安装。双击msi包安装,记住安装的路径。配置环境变量(和配…

YOLOv7训练数据报错

YOLOv7训练数据报错 错误提示1解决方案问题2解决方案成功运行 错误提示1 fatal: not a git repository (or any of the parent directories): .git Traceback (most recent call last):File "/home/ubuntu/code/yolov7-main/utils/google_utils.py", line 26, in att…

一图梳理多模态领域发展简史

本文采用关系图的方式整理了:CLiP、ViLT、FLiP、ALBEF、CoCa、BLiP、VLMo、BEiT 和BEiT v3等近几年来经典的多模态大模型,以及这些工作的相互依托关系。灵感来自:跟李沐读论文系列——多模态串讲 1 模型关系图: ’ 2 各模型的架…

Power BI 学习

数据获取 数据清洗 对导入的数据进行数据整理的过程一般称为「数据清洗」,之所以称之为清洗,是因为在数据分析师眼中,杂乱的数据就是脏数据,只有被清洗成干净的数据后才可以进行分析使用。 数据丰富 操作 1.复制列 点击列名选…

Spring之提前编译:AOT

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

讯飞星火认知大模型智能语音交互调用

随着国内外大模型热度的兴起,依托于大模型的智能化,传统的人机交互已经不能满足人们交互的需求。而结合语音和大模型的交互拜托传统互联网获取知识的文字限制,用语音也可以轻松获取想要的知识和思路。 一、大模型智能语音交互调用实现思路 …

k8s集群通过helm部署skywalking

1、安装helm 下载脚本安装 ~# curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 ~# chmod 700 get_helm.sh ~# ./get_helm.sh或者下载包进行安装 ~# wget https://get.helm.sh/helm-canary-linux-amd64.tar.gz ~# mv helm …

智能监测/检测系统EasyCVR国标接入无法播放是什么原因?该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

acwing linux docker教程

终章 听着名字还挺伤感的哈哈哈其实是Linux的终章,感谢大家这段时间的阅读,这段使时间我为了给大家清楚的讲解一下Linux自己也是很认真的学习了一遍,自己提升了也不少。其实最近学校里面是讲了Linux和windows server 2019搭载DNS、web、ftp服…

YOLOv5改进 | 主干篇 | ShuffleNetV2轻量化网络助力FPS提高(附代码+修改教程)

一、本文内容 本文给大家带来的改进内容是ShuffleNetV2,这是一种为移动设备设计的高效CNN架构。其在ShuffleNetV1的基础上强调除了FLOPs之外,还应考虑速度、内存访问成本和平台特性。(我在YOLOv5n上修改该主干降低了GFLOPs,但是参数量还是有一定上涨&am…

『JavaScript』全面掌握JavaScript数组的操作、方法与高级技巧

📣读完这篇文章里你能收获到 学习JavaScript中数组的基本操作掌握JavaScript数组的多种内置方法了解JavaScript中的数组扩展运算符、Array.from()和Array.of()等实用技巧熟悉如何在JavaScript中使用数组方法进行数据处理 文章目录 一、基本操作1. 创建数组2. 访问和…

【Spring实战】07 JPA

文章目录 1. 定义2. 出现原因3. 添加依赖4. 使用1)创建 Repository 接口2)自定义查询方法(非必须)3)创建实体类4)调用方法 5. 验证6. 优点7. 缺点8. 详细代码总结 1. 定义 Spring Data JPA 是 Spring 提供…

IP 地址归属地查询

IP 地址归属地查询 1. IP 地址归属地查询2. IP 地址归属地查询References 1. IP 地址归属地查询 https://tool.lu/ip/index.html 2. IP 地址归属地查询 https://www.ip.cn/ip/.html References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

OpenAI GPT 模型 API 接口新增参数 top_logprobs 和 logprobs

文章目录 一、前言二、主要内容三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 在最新的 OpenAI 官方 APIs 文档中,Create chat completion 中新增了 top_logprobs 和 logprobs 这两个关键参数。 官方文档地址&#xff…

掌握ElasticSearch(一):Elasticsearch安装与配置、Kibana安装

文章目录 〇、简介1.Elasticsearch简介2.典型业务场景3.数据采集工具4.名词解释 一、安装1.使用docker(1)创建虚拟网络(2)Elasticsearch安装步骤 2.使用压缩包 二、配置1.目录介绍2.配置文件介绍3.elasticsearch.yml节点配置4.jvm.options堆配置 二、可视化工具Kibana1.介绍2.安…