本篇介绍个人或企业在 GitHub 上发布一个 Python 项目需要了解和注意哪些内容
配置setup.py
打包和发布一项都是通过准备一个 setup.py
文件来完成的。假设你的项目目录结构如下:
demo |
在使用打包命令 python setup.py sdist bdist_wheel
,将会生成在 dist 目录下生成两个文件 demo-1.0.0-py3-none-any.whl
和 demo-1.0.0.tar.gz
.whl
文件是用于执行pip install dist/demo-1.0.0-py3-none-any.whl
将其安装到...\Python38\Lib\site-packages\demo
目录时使用的文件。.tar.gz
是打包后的源代码的存档文件。而MANIFEST.in
则是用来控制这个文件里到底要有哪些内容。
下面例子是如何使用 MANIFEST.in
来定制化生成 dist/*.tar.gz
里的内容。MANIFEST.in
文件内容如下:
include LICENSE |
根据以上文件内容,在使用命令 python setup.py sdist bdist_wheel
生成 demo-1.0.0.tar.gz
文件时会包含 LICENSE
, README.md
, MANIFEST.in
这三个文件,并且还会包含 demo
, tests
, docs
三个目录下的所有文件,最后排除掉所有的 __pycache__
, *.log
, *.pyc
文件。
更多关于 MANIFEST.in
文件的语法请参看 https://packaging.python.org/guides/using-manifest-in/
官方有详细的示例和文档 https://packaging.python.org/tutorials/packaging-projects/
Python sample 项目供你参考 https://github.com/pypa/sampleproject
攒点耐心将上面的链接看完,就完全满足一般项目的发布要求了。
发布到PyPI
使用 Python 大家都知道可以通过以下命令来下载你要是使用的外部库,Python 有着大量的第三方库,将开源项目发布到 PyPI 上方便用户使用。
pip install xxxx |
什么是 PyPI
PyPI 是 The Python Package Index 的缩写,意思是 Python 包索引仓库,用来查找、安装和发布 Python 包。
PyPI 有两个环境
准备
- 如果想熟悉 PyPI 发布工具和发布流程可以使用测试环境 TestPyPI
- 如果已经熟悉了 PyPI 的发布工具和流程可以直接使用正式环境 PyPI
- TestPyPI 和 PyPI 需要单独注册,即在正式环境注册了,如果去使用测试环境也同样需要注册。注意:同一个账号不能在 PyPI 和 TestPyPI 同时注册。
假设你的项目已经完成了,准备要发布到 PyPI 了,执行下面的命令,就可以将项目发布到 PyPI 上了。
rm dist/* |
关于pydoc
Python 内置了 doc 的功能,叫 pydoc
。执行 python -m pydoc
可以看到它有哪些选项和功能。
cd docs |
执行 python -m pydoc -b
可以在本地立即启动一个 web 页面来访问你 ...\Python38\Lib\site-packages\
目录下所有 Libraries 文档。
这些本地的 web 文档如何在外网进行访问?可以通过 GitHub 有内置的 GitHub Pages 功能,很容易提供一个在线网址。
打开你的 GitHub python 项目设置选项 -> 找到 GitHub Pages -> Source 选择你的分支和路径,保存后就立刻拥有了一个网址。例如:
- https://xxxxx.github.io/demo/ 是你的项目主页,显示是 README.md 信息
- https://xxxxx.github.io/demo/docs/demo.html 是你的项目的 pydoc 文档
关于版本号
另外如果是正式版本,在发布还需要注意版本号的选择。
- 如果是功能简单,完成度也不高,建议从 0.0.1 版本开始。
- 如果是功能完善,且完成度很高,那么可以从 1.0.0 版本开始。
比如一个项目从准备发布到正式发布有四个阶段:Alpha, Beta, 候选发布以及正式发布。假如正式发布的版本号是 1.1.0 版本,根据以下的版本标识的规范:
X.YaN # Alpha release |
得到 Alpha, Beta, 候选发布及正式发布版本分别如下:
Alpha release 版本号是 1.1.0a1, 1.1.0a1, 1.1.0aN...
Beta release 版本号是 1.1.0b1, 1.1.0b1, 1.1.0bN...
Release Candidate 版本号是 1.1.0rc1, 1.1.0rc2, 1.1.0rcN...
Final release 版本号 1.1.0, 1.1.1, 1.1.N...
Python 官方的版本标识和依赖规范文档
选择License
企业级的项目 License 一般由公司的法律团队来提供,发布者只需拿到 License 文件做一些格式化工作(比如将 license.txt 文件格式化为每行 70~80 个字符)。
如果是个人项目或是想了解开源许可相关的介绍,常见的软件开源许可证(以下许可证是按条件数量排序的)
- GNU AGPLv3
- GNU GPLv3
- GNU LGPLv3
- Mozilla Public License 2.0
- Apache License 2.0
- MIT License
- Boost Software License 1.0
- The Unlicense
这里有一篇关于《Github仓库如何选择开源许可证》文章供参考。
如何选项 License https://choosealicense.com/licenses\
如何选项 License GitHub 仓库 https://github.com/github/choosealicense.com\
如何选项 License 附录 https://choosealicense.com/appendix \