python程序打包多个py文件_不使用setup.py,打包 Python 项目

868452dd2657d0c30f7630ececda56eb.png

我编写了许多开源项目,并允许其他人通过PyPI访问这些项目。为此,我需要从这些项目构建一个源代码分发版(sdist)和一个可选的wheel包,并将二者上传到PyPI。最后,这个sdist和wheel包必须要能通过pip进行安装,以便其他人使用。

我的大多数项目使用setuptools(通过一个setup.py)进行打包,因为这是长久以来实现此目的的(唯一)方法,但是,最近的两个PEP(517和518)允许我们开发新的工具。最值得注意的是,这些新工具使用了一个pyproject.toml文件,你可以在这篇文章中了解有关它的更多信息。

一段时间以来,我一直在使用这些新工具中的一种,Poetry,来管理我的应用程序。最初,我这样做是受Poetry's的文件锁支持所鼓舞的,它优于我之前使用的requirements-to-freeze系统。还有一个原因是poetry允许执行脚本,比如poetry run test,我在这篇文章中解释过。

因为我喜欢在我的应用程序中使用Poetry,所以我想我应该在我的一个库(Quart- Auth)上尝试一下,Quart- Auth是Quart的一个身份验证管理扩展。这是我正在实验的一些东西,但是我已经对下面的设置很满意了。

Setup.py 设置

由于我的项目是纯python的(没有用c代码来编译),构建要简单得多,唯一的复杂之处是我希望按照PEP 561包含一个py.typed文件。我的设置需要一个MANIFEST.in和一个 setup.py,并且关键的是使用check-manifest工具和python setup.py check来确保一切都是正确的。

来自Quart-Rate-Limiter的一个示例setup.py文件(精简至关键部分)是,

4ad4208b0fdba2ad6c7639ee6108d961.png

一个示例MANIFEST.in文件(同样进行了精简) 是:

e3244feaf9a64d70cd42179e9bc9d950.png

Setup.py 发布过程

要构建sdist、wheel并将其推送到PyPI,一个安装了setuptools、whee和twine的环境是必需的。然后你就可以使用以下命令去构建和上传,

82ee1e09ab87f1de46e53a95a0a48a83.png

Poetry 设置

Poetry包含了一个方便的命令来允许你使用poetry new从头设置一个项目或者使用poetry init在现有的项目中设置一个项目。这个命令会创建pyproject.toml文件,其中包含了继续进行项目所需的足够的信息。对于Quart-Auth,我添加了一个分类器列表、存储库url、依赖项(包括用于开发的tox),并指出py.typed文件应该在构建包中,请在这里查看该文件。

a032b77e7e97c8e402f86acbd2e28e68.png

就我所知,这就是所有需要设置的东西。我们现在就可以使用poetry构建Quart-Auth了。

Poetry发布

要构建sdist、wheel并将其推送到PyPI,一个安装了poetry和wheel的环境是必需的。然后你就可以使用以下命令去构建和上传,

3aafff2420affb90b7bfc73c57526fe4.png

补充:包版本用法

通常情况下,例如在Quart & Flask中,版本存储在源代码中,该代码会在setup.py中被加载或解析。

67dba40190752744d1c2a7ba6db6fb2a.png

这就允许库用户以编程方式查询版本(例如quart.__about__.__version__)。这在poetry设置中显然是不可能的,但是在Python3.8中有一个更好的解决方案,

9a3c4eef4ff7e2a72b12bb5609b634ea.png

一个示例用法是当你在构建Quart-Auth文档的时候。

结论

只使用pyproject和poetry而不使用setuptools有一个重要的缺点,那就是可编辑安装,例如,pip install -e ..在没有shim的情况下是不可能执行的,看看这个讨论。这就暂时排除了在我所维护的Quart 和 Hypercorn项目中使用Poetry的可能性。

切换到poetry和pyproject.toml就意味着我距离为我的项目设置一个更简单、更清晰的配置这个目标更近了一步,即pyproject.toml中的所有东西。当我有时间的时候,我可能会转移更多的项目。

英文原文:https://pgjones.dev/blog/packaging-without-setup-py-2020/
译者:一瞬
b8a0e5307ac2814cadc0b2890f20c300.png

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

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

相关文章

软件工程软件开发成本度量规范_软件开发成本度量方法

软件成本度量一直都是软件行业的一个痛点问题。软件度量一度乱象丛生。拍脑袋的定价方式曾大行其道。软件成本度量的乱象直接导致了软件价格的诸多问题。比如预算费用存在浪费或不足的现象,招标存在投标额过低过高等非正常状况。这些情况都是因为度量标准的缺失&…

数据挖掘算法_算法篇(01) 数据挖掘算法初探

前言无论是传统行业,还是互联网行业。掌握数据,就是掌握规律。当你了解了市场数据,对它进行分析,就可以得到市场规律。当你掌握了产品自身的数据,对它进行分析,就可以了解产品的用户来源、用户画像等等。所…

java中怎么判断一段代码时线程安全还是非线程安全_24张图带你彻底理解Java中的21种锁...

(给ImportNew加星标,提高Java技能)转自:悟空聊架本篇主要内容如下:本篇文章已收纳到我的 Java 在线文档、 Github。我的 SpringCloud 实战项目持续更新中。帮你总结好的锁:序号锁名称应用1乐观锁CAS2悲观锁synchronized、vector、…

python大概学多久_自学Python要学多久可以学会?

如果是自学,从零基础开端学习python的话,按照每个人理解能力的不同,大致上需求半年到一年半左右的时刻,当然,如果有其它编程言语的经历,入门还是比较快的,大概需求2~3个月可以用Python言语编写一…

u盘 linux centos 5.3,鸟哥linux私房菜学习笔记,U盘安装centos5.3不能正常进入图形界面的问题...

前面说过自己成功引导了centos系统,现在进入启动界面,首次进入会进行相关设置,按照步骤一步一步完成,取消完光盘安装,点击下一步,就进入下面这个界面,没有登录框。。。没错!怎么蓝屏…

将excel转为python的字典_python读取excel表并把数据转存为字典

excel表如下:我们需要通过使用python的xlrd方法先读取excel,再遍历赋值给字典。代码如下: importxlrdclassRead_Ex():defread_excel(self):#打开excel表,填写路径 book xlrd.open_workbook("../Data/test.xlsx")#找到s…

micropython是啥 知乎_嵌入式开发必备调试工具:Micro-Lab

在工作中,以什么样的方式向领导汇报工作最直接高效呢?当然是图形界面!图形界面更好表达一个程序设计的逻辑思维,一目了然,本次介绍的Micro-Lab出自风媒电子-赵工之手。 1.什么是Micro-Lab? Micro-Lab可以称得上是迄今…

python面向对象三大基本特性_python面向对象之三大特性

继承 先看个简单的例子了解一下继承。class Animal: #父类 def __init__(self, name, age, department): self.namename self.ageage self.departmentdepartmentdefrunning(self):print(‘%s可以奔跑!‘%self.name)class Cat(Animal): #括号里放要继承的父类 def __…

python怎么调用列表_Python中列表的使用

python中的列表与java中的数组非常类似,但使用方法比java中数组简单很多,python中的数据类型不需要显示声明,但在使用时必须赋值,列表元素下标从0开始 初始化列表(初始化一个包含五个元素的列表和一个空列表&#xff0…

jquery find 找到frame select_简述jQuery

jQuery 是一个高效、精简并且功能丰富的 JavaScript 工具库。它提供的 API 易于使用且兼容众多浏览器,这让诸如 HTML 文档遍历和操作、事件处理、动画和 Ajax 操作更加简单。一、获取元素jQuery的核心设计思想就是获取元素,然后对其操作;因此…

求中位数中回文数之和C语言,一些算法题及答案

1. 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums [2, 7, 11, 1…

自然哲学的数学原理_物理起源点,牛顿《自然哲学的数学原理》

1687年 英国艾萨克牛顿(Sir Isaac Newton,1643—1727),英国物理学家、数学家、天文学家、自然哲学家和炼金术士。1687年他发表《自然哲学的数 学原理》,阐述了万有引力和三大运动定律,奠定了此后三个世纪里力学和天文学的基础&…

如何将另外一个表里的数据与联动_跨境电商(亚马逊)后台财务数据包

亚马逊后台的财务数据包是刚进这个行业的财务人员最希望能了解熟悉的,这块也是相对于国内财务比较有难度的内容,主要难点是亚马逊平台是新的东西,国内财务对规则,费用内容,流程都比较懵,另外就是各项资料都…

无法在源表中获得一组稳定的行_行输出变压器的结构、符号及电路分析

行输出变压器又称逆程变压器、回扫变压器,俗称行输出,它是电视机、显示器中的一个重要变压器。1.行输出变压器结构行输出变压器的全部绕组和高压整流管均密封在其中,底部引出各个绕组的引脚,高压输出采用高压引线直接送至显像管的…

pid调节软件_非常实用的PID算法和PID控制原理

点击箭头处“工业之家”,选择“关注公众号”!PID控制原理和特点工程实际中,应用最为广泛调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器问世至今已有近70年历史,它以其结构简单…

对pca降维后的手写体数字图片数据分类_【AI白身境】深度学习中的数据可视化...

今天是新专栏《AI白身境》的第八篇,所谓白身,就是什么都不会,还没有进入角色。上一节我们已经讲述了如何用爬虫爬取数据,那爬取完数据之后就应该是进行处理了,一个很常用的手段是数据可视化。通过数据可视化&#xff0…

android实现箭头流程列表_反思|Android 列表分页组件Paging的设计与实现:系统概述...

作者:却把清梅嗅链接:https://github.com/qingmei2/blogs/issues/30前言本文将对Paging分页组件的设计和实现进行一个系统整体的概述,强烈建议 读者将本文作为学习Paging 阅读优先级最高的文章,所有其它的Paging中文博客阅读优先级…

sql server numeric 可存几位小数_想成为优秀SQL高手?你就差这些细节

标准结构化查询语言(Structured Query Language)简称SQL,sql是我们日常工作中使用最多一项技能,写sql可以说是一个可以干到退休的技能。看似简单,但要精通却很难。 sql包括增、删、改、查,创建表、删除表、修改表等等内容&#xf…

java random产生随机数_java的三种随机数生成方式,必掌握

随机数的产生在一些代码中很常用,也是我们必须要掌握的。而java中产生随机数的方法主要有三种:第一种:new Random()第二种:Math.random()第三种:currentTimeMillis()第一种需要借助java.util.Random类来产生一个随机数…

C 怎么处理windows路径_python学习笔记-7:文件读写之文件与文件路径

文件关键属性:路径文件名根据已知的文件路径生成包含正确路径分隔符的文件路径字符串:import osstt os.path.join(usr,bin,spam)print(stt)#usrbinspamwindows的路径分隔符为,字符串中使用需要转义字符,因此应输入为当前工作目录程序运行时&…