起因
目前维护这两个Python轮子:
之前一直使用的是setup.py进行打包,不过11月份更新NJUlogin时发现这样的一个提示:
因此决定使用新的pyproject.toml的方式进行打包。当时临时学了Poetry并给NJUlogin做了适配,今天更新mijia-api想顺便也做一个适配,结果发现忘了怎么用,还是写个博客记录一下吧。看来之后也多多用Poetry来管理依赖了。
Poetry
Poetry官网上对自身的定位是:Python packaging and dependency management made easy。用起来有点像npm(如果你对nodejs有一定了解的话),也是通过命令行修改管理依赖的文件。
不过poetry有点太长了,从现在开始你就叫pop吧。
安装
直接查看文档吧: https://python-poetry.org/docs/#installation
我这里用的是pipx进行安装
初始化已有项目
得到下述pyproject.toml文件
不过因为我的包里面包含大写字母,需要把[tool.poetry]下面的name改了的同时,再额外手动加一个packages项,另外再把setup.py中的一些其他配置加上来:
新建Peotry虚拟环境并安装依赖
默认会在~/.cache/pypoetry里创建虚拟环境,可以使用pop config进行修改,详见文档这里,我个人更习惯放在项目目录中:
之后便可以从requirements.txt中将依赖一个一个安装上了,下面这个命令会将依赖写入pyproject.toml文件中并生成poetry.lock:
Peotry的一大优势就是能够以树状形式展示依赖:
至此,可以将原来的setup.py删除了。
打包并发布
版本可以使用poetry-dynamic-versioning动态指定,不用每次修改pyproject.toml指定版本号。
此时就可以简单地使用一行命令构建了:
不像twine使用~/.pypirc保存pypi的token,Poetry需要额外进行配置:
然后就可以发布了!