我编写了许多开源项目,并允许其他人通过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文件(精简至关键部分)是,

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

Setup.py 发布过程

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

Poetry 设置

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

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

Poetry发布

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

补充:包版本用法

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

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

一个示例用法是当你在构建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/
译者:一瞬

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

  1. python程序创建词云 中国地图_就这么简单!使用Python生成漂亮的词云

    原标题:就这么简单!使用Python生成漂亮的词云 作者:Linux迷 链接:https://www.linuxmi.com 词云是一种数据可视化技术,用于表示文本数据,其中每个单词的大小表示其出现的 ...

  2. python程序调用写好的代码_扣丁学堂浅谈Python编程中NotImplementedError的使用方法...

    扣丁学堂浅谈Python编程中NotImplementedError的使用方法 2018-07-04 14:08:02 2559浏览 本篇文章扣丁学堂 Python编程中raise可以实现报出错误的功 ...

  3. ipython下怎么运行py文件_在IPython中执行Python程序文件的示例

    简单使用了一下之后,我觉得如果有机会(公司里面编码是极不自由的,也无所谓,我在公司不做数据分析),我肯定是更喜欢使用IPython作为我的Python shell环境了.简单的接触发现了不少我喜欢的功 ...

  4. python脱离依赖运行py文件_将一个python.py文件拆分为多个相互依赖的文件

    我想将我编写的一个大python模块拆分成一个目录中的多个文件,其中每个文件都是一个函数,它可能与模块中的其他函数有依赖关系,也可能没有依赖关系.下面是我想出的一个简单的例子: 首先,这里有一个自包含 ...

  5. python程序导入import、规范化和封装自己写的.py文件

    目录 1. 简单地导入自己写的.py文件 2. 将自己写的多个.py文件规范化成外部类,并创建__init__.py 3. 将自己的程序封装成外部包 1. 简单地导入自己写的.py文件 将a.py与b ...

  6. python 在一个py文件中调用另一个py文件中的变量以及一个有趣的问题

    python 在一个py文件中调用另一个py文件中的变量以及一个有趣的问题 1.在一个py文件中调用另一个py文件中的变量 新建一个py文件,记为t1.py # t1.py m = 2 n = 1 a ...

  7. jupyter调用py文件_解决Jupyter notebook中.py与.ipynb文件的import问题

    在jupyter notebook中,因为其解析文件的方式是基于json的,所以其默认保存的文件格式不是.py而是.ipynb.而.ipynb文件并不能简单的import进.py或者.ipynb文件中 ...

  8. Python程序员经常会遇到文件权限问题,例如在打开或写入文件时出现“PermissionError: [Errno 13] Permission denied...

    Python程序员经常会遇到文件权限问题,例如在打开或写入文件时出现"PermissionError: [Errno 13] Permission denied"错误.这个错误通常 ...

  9. py安装文件时报错usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]

    py安装文件时报错usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...] 引言 solved 引言 报错: pyth ...

最新文章

  1. linux自学笔记——RAID级别特性以及软RAID的实现
  2. armv8 汇编 绝对地址赋值_ARMv8带来的变化
  3. 通过QQ或者QQ帮助别人学习Lync汇总
  4. Google Latitude 能否成为所有移动社会网络的杀手?
  5. Centos 7.0设置/etc/rc.local无效问题解决
  6. 读写分离数据库之MyCat
  7. Blending and Bagging
  8. 华硕服务器 u盘安装系统,华硕台式机重装系统详细图解步骤
  9. WEB前端是干什么的?
  10. python3调用arcpy地理加权回归_分析地理加权回归分析结果的操作方法
  11. 利用opencv剪切图片
  12. 极客空间-MySQL实战45天-第三天
  13. 安装nginx,php8,nfs,oralce19c客户端
  14. css使用rgb属性设置颜色
  15. SQL中将查询结果赋值给变量
  16. SCI论文并没有想像中的难写,发表SCI论文的小技巧。2012年和2013年SCI期刊论文和EI期刊论文
  17. 人工智能应用于心电图:这6篇论文值得收藏
  18. anytime you feel the pain,hey,dear,refrain
  19. 关于充分必要条件的充分性和必要性
  20. idea编译报错:Refer to the generated Javadoc files in ‘..targetapidocs‘ dir. 解决

热门文章

  1. 高中计算机结业考试总结,高中考试总结
  2. android支持色彩管理软件,安卓首家!OPPO全链路色彩管理系统亮相:全局支持10bit照片视频...
  3. mysql监控sql排名_监控数据库性能的SQL汇总
  4. 使用Androidkiller编译APK文件时出现libpng error: Not a PNG file的错误
  5. sql 嵌套select与关联select
  6. 用Hibernate tool从实体对象生成数据库表
  7. Fliptile(状压+思维)
  8. Complete Tripartite CodeForces - 1228D(三分图染色)
  9. 达拉斯大学计算机硕士专业排名,美国大学研究生专业排名:人机交互
  10. 着墨中文lisp登入_Lisp的本质 - climbdream的个人空间 - OSCHINA - 中文开源技术交流社区...