前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在GitHub上发布一个Python项目需要注意哪些

在GitHub上发布一个Python项目需要注意哪些

作者头像
Peter Shen
发布2020-09-18 17:00:57
1.3K0
发布2020-09-18 17:00:57
举报
文章被收录于专栏:持续集成持续集成

本篇介绍个人或企业在 GitHub 上发布一个 Python 项目需要了解和注意哪些内容

  1. 如何配置setup.py
  2. 如何发布到PyPI
  3. 生成pydoc
  4. 版本号的选择
  5. License的选择

配置setup.py

打包和发布一项都是通过准备一个 setup.py 文件来完成的。假设你的项目目录结构如下:

代码语言:javascript
复制
demo
├── LICENSE
├── README.md
├── MANIFEST.in # 打包时,用来定制化生成 `dist/*.tar.gz` 里的内容
├── demo
│   └── __init__.py
├── setup.py
├── tests
│   └── __init__.py
│   └── __pycache__/
└── docs

使用打包命令 python setup.py sdist bdist_wheel将会生成在 dist 目录下生成两个文件 demo-1.0.0-py3-none-any.whldemo-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 文件内容如下:

代码语言:javascript
复制
include LICENSE
include README.md
include MANIFEST.in
graft demo
graft tests
graft docs
global-exclude __pycache__
global-exclude *.log
global-exclude *.pyc

根据以上文件内容,在使用命令 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/

1. 官方有详细的示例和文档 https://packaging.python.org/tutorials/packaging-projects/ 2. Python sample 项目供你参考 https://github.com/pypa/sampleproject

攒点耐心将上面的链接看完,就完全满足一般项目的发布要求了。

发布到PyPI

使用 Python 大家都知道可以通过以下命令来下载你要是使用的外部库,Python 有着大量的第三方库,将开源项目发布到 PyPI 上方便用户使用。

代码语言:javascript
复制
pip install xxxx

什么是 PyPI

PyPI 是 The Python Package Index 的缩写,意思是 Python 包索引仓库,用来查找、安装和发布 Python 包。

PyPI 有两个环境

  • 测试环境 TestPyPI https://test.pypi.org/
  • 正式环境 PyPI https://pypi.org/

准备

  1. 如果想熟悉 PyPI 发布工具和发布流程可以使用测试环境 TestPyPI
  2. 如果已经熟悉了 PyPI 的发布工具和流程可以直接使用正式环境 PyPI
  3. TestPyPI 和 PyPI 需要单独注册,即在正式环境注册了,如果去使用测试环境也同样需要注册。注意:同一个账号不能在 PyPI 和 TestPyPI 同时注册

假设你的项目已经完成了,准备要发布到 PyPI 了,执行下面的命令,就可以将项目发布到 PyPI 上了。

代码语言:javascript
复制
rm dist/*
# 生成代码存档 .tar.gz 文件和构建文件 .whl 文件
python setup.py sdist bdist_wheel
# 如果发布到TestPyPI使用以下命令
twine upload --repository testpypi dist/*
# 如果发布到PyPI使用以下命令
twine upload dist/*

关于pydoc

Python 内置了 doc 的功能,叫 pydoc。执行 python -m pydoc 可以看到它有哪些选项和功能。

代码语言:javascript
复制
cd docs
python -m pydoc -w ..\   # 生成全部文档

执行 python -m pydoc -b 可以在本地立即启动一个 web 页面来访问你 ...\Python38\Lib\site-packages\ 目录下所有 Libraries 文档。

以 elasticsearch 文档为例

这些本地的 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 版本,根据以下的版本标识的规范:

代码语言:javascript
复制
X.YaN   # Alpha release
X.YbN   # Beta release
X.YrcN  # Release Candidate
X.Y     # Final 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 官方的版本标识和依赖规范文档 https://www.python.org/dev/peps/pep-0440

选择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仓库如何选择开源许可证》文章供参考。

1. 如何选项 License https://choosealicense.com/licenses 2. 如何选项 License GitHub 仓库 https://github.com/github/choosealicense.com 3. 如何选项 License 附录 https://choosealicense.com/appendix

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps攻城狮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置setup.py
  • 发布到PyPI
    • 什么是 PyPI
      • 准备
      • 关于pydoc
      • 关于版本号
      • 选择License
      相关产品与服务
      Elasticsearch Service
      腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档