发布自己的 python 包到 Pypi (Distributing Python Modules)
将要发布的包的目录结构如下
|
|
真正要安装到 site-packages 的是cocotbextPlotData, 这个目录名字不能有特殊符号如 -, 否则 import 的时候会报错
可以看到不需要 setup.py 不需要 setup.cfg, 也不需要 MANIFEST.in, 只需要一个 pyproject.toml 即可
pyproject.toml
这是构建包的配置文件, 内容如下:
关于如何编写 pyproject.toml 可以参考 writing-pyproject-toml
|
|
build-system
这一项指定编译工具, 这里选择 setuptools, 除了这个还可以选择 Hatchling, Flit, PDM
project
这一项主要指定项目相关的内容
其中 readme 只支持三种格式(.md, .rst, .txt), 并不支持orgmode 格式
description 只支持短的, 不支持long description 即在PYPI 主页显示包的时候没有长的说明
project.urls
这一项指定链接, 这样在pypi 页面可以直接跳转到你的个人仓库
tool.setuptools
setuptools 的配置
tool.setuptools.package-data
添加资源文件
cocotbextPlotData = [".org", “.ttf”]
的意思是把cocotbextPlotData 文件夹下的所有 .org 和 所有 .ttf 加入到资源文件列表,
这样在install 的时候会把这些资源文件也一起拷贝到包内
参考: datafiles
更多配置可以参考 https://setuptools.pypa.io/en/latest/userguide/quickstart.html
包内容
__init__.py
这个文件可以是空的, 也可以加入一些信息如 version=“V0.1”
plotData.py
主程序
README.org
sarasa-mono-sc-regular.ttf
这是字体文件, 即资源文件, 如果python 包中没有用到, 可以不要
构建包
本地安装
|
|
本地可编辑安装
|
|
这种安装方式相当于在site-packages 内建了个软链接
测试
|
|
发布到 test Pypi
注册pypi
到 https://test.pypi.org/account/register/ 注册登录
注册完还要生成 recover code 和激活 2FA 才能生成 api token
-
test pypi recover code
如果忘记密码, 可以使用上面任意一个来重新登录
-
添加 ~/.pypirc 文件
里面填入
1 2 3
[testpypi] username = __token__ password = api_token
password 里面填入api token, 这样使用 twine 上传包时就不需要手动输了
安装 twine
|
|
这个用于把本地编译好的包上传到 Pypi
安装 build
|
|
这个用于把包编译成二进制
编译二进制
|
|
这会生成 dist 文件夹
发布
|
|
在testpypi 网页上可以看到
测试安装
|
|
发由到 PyPi
Pypi 的 Recover code 如下:
修改 ~/.pypirc
添加以下内容
|
|
编译二进制
|
|
发布
|
|
这时已经可以在 PyPi 看到包了, 但是还搜不到, 不清楚啥情况, 可能是延时?
-
yank release
Yank 之后就可以通过 ==0.1 这样的方式来安装特定版本了
测试安装
其中的pip3iu 是我写的一个函数, 相当于 pip3 install xxx -user