发布 pysproto
今天是个值得纪念的日子,我终于将适用于 Python 3 的 pysproto 成功上传到 pypi 了,顺便写一篇博客吐槽下 Python 的打包发布系统
依稀记得之前将 C 文件都放在 src 目录里,结果死活编译不过,于是都散装放在根目录了;然后 Pypi 要先发布测试包,再在网页操作一下,发布成正式包。setup.py 作为包的描述文件,long_description 字段还得用 reStructure Text 的格式写,不然就提交不过。pysproto 这个模块需要头文件,但是屡屡打包都没打进去。感觉打包模块在这里是 broken 的, 有个 stackoverflow 的回答精确描述了我的感受 : 在 sources 字段列举头文件会导致无法编译,distutil 不能区分 .h 文件,会试图编译对应的 .o 文件;在 headers 字段列举头文件会被忽略;在 setup 函数的 headers 字段里列举头文件能识别,但是不会被打进包里;在 Extension 函数的 include_dirs 里列举头文件,也不会打进包里。最后还是用了最高赞答案的 MANIFEST.in 文件里写一行 graft 头文件路径
, 终于解决问题。。。
要测试打包是否工作,可以试试用 python3 -m build
来测试,需要安装 venv 和 build 模块。这个命令会新建一个虚拟环境,然后打包成源码,再在虚拟环境里编译安装源码。不过最后还是真机测试了一下,修正了 Python.h 头文件写死绝对路径的问题。。。
还有一个奇怪的点,pypi 的网页版不支持直接新建项目,新建 token 的时候却要选择项目。于是,被迫在 ~/.pypi 里新建一个高权限的 token,将包上传上去,建立一个项目,再删掉 token,新建项目专用 token,相当别扭。。。而且为啥上传包居然是用 twine,不是用 setuptools?
好吧,从 2017 年到 2021 年,总算将包上传上去了。。。