python 学习之 打包上传你的软件到 pypi 官网
人生无常,大肠包小肠

1引言
分享一下如何打包我们写好的函数成软件,然后上传到 pypi 官网,方便下载与分享。
2创建账号
去官网 https://pypi.org/ 注册好自己的账号:

3写好函数
然后把我们的函数写好,如果需要命令行格式的则可以用到 argparse 库,我这里简单写了一个加和函数,返回加和的值:
def main():
"""
calculate sum.
"""
# 导入模块
import argparse
parser = argparse.ArgumentParser(usage="test",
description="example test",
epilog="Thank your for your support.")
# version
parser.add_argument('-v','--version', action='version', version='%(prog)s 0.0.1')
# 读取注释类型文件
parser.add_argument('integers', metavar ='N', type = int, nargs ='+',
help ='an integer for the accumulator')
# 解析参数
args = parser.parse_args()
def add_number(number):
val = sum(number)
return val
print(add_number(number=args.integers))
我们可以运行脚本测试:
$ python add_number.py -h
usage: test
example test
positional arguments:
N an integer for the accumulator
optional arguments:
-h, --help show this help message and exit
-v, --version show program's version number and exit
Thank your for your support.
$ python add_number.py 1 2 3
6
4文件夹结构
把函数脚本放在 src 下的 add_number 文件夹里:
add_number/
├── LICENSE
├── pyproject.toml
├── README.md
├── setup.cfg
├── src/
│ └── add_number/
│ ├── __init__.py
│ └── add_number.py
└── tests/
5打包
创建 pyproject.toml 文件
告诉构建工具(如 pip 和 build)构建项目所需的内容,内容如下:
[build-system]
requires = [
"setuptools>=42",
"wheel"
]
build-backend = "setuptools.build_meta"
创建配置信息
有 动态 和 静态 两种形式可以构建,推荐使用静态也就是 setup.cfg
格式,动态是 setup.py
,以下是区别:

主要包括一些作者信息,版本号,软件名称,描述信息等:
示例:
[metadata]
name = add_number
version = 0.0.1
author = laojunjun
author_email = 3219030654@stu.cpu.edu.cn
description = test example.
long_description = file: README.md
long_description_content_type = text/markdown
url = https://github.com/junjunlab/add_number
project_urls =
Bug Tracker = https://github.com/junjunlab/add_number/issues
classifiers =
Programming Language :: Python :: 3
License :: OSI Approved :: MIT License
Operating System :: OS Independent
[options]
package_dir =
= src
packages = find:
python_requires = >=3.6
[options.packages.find]
where = src
[options.entry_points]
console_scripts =
add_number = add_number.add_number:main
最后一个代码比较重要,可以让我们的函数在终端命令行里调用执行:
[options.entry_points]
console_scripts =
add_number = add_number.add_number:main
等号 左边为终端调用执行的函数名称, : 号前为 src 目录下的 add_number 目录下的 add_number.py 脚本里的 main
函数。
参数详解:

创建 README.md
这个为 markdown 格式,来说明你的软件怎么使用及具体描述信息。

创建 LICENSE
对于上传到 Python Package Index 的每个包来说,包含一个许可证非常重要。这将告诉安装您的软件包的用户他们可以使用您的软件包的条款。有关帮助选择许可证的信息,请参阅 https://choosealicense.com/。一旦你选择了一个许可证,打开 LICENSE 并输入许可证文本。例如,如果你选择了 MIT 许可证:
Copyright (c) 2018 The Python Packaging Authority
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
复制一下即可。
tests 文件夹是个空文件,觉得不用创建也行。
打包
之前目录结构:
(base) junjun@JunJunLab:/mnt/c/Users/admin/Desktop/add_number$ tree ./
./
├── LICENSE
├── README.md
├── pyproject.toml
├── setup.cfg
├── src
│ └── add_number
│ ├── __init__.py
│ └── add_number.py
└── tests
3 directories, 6 files
打包:
(base) junjun@JunJunLab:/mnt/c/Users/admin/Desktop/add_number$ python3 -m build
* Creating venv isolated environment...
* Installing packages in isolated environment... (setuptools>=42, wheel)
...
Successfully built add_number-0.0.1.tar.gz and add_number-0.0.1-py3-none-any.whl
结束后生成一个新的 dist 目录,含有两个打包好的文件:
(base) junjun@JunJunLab:/mnt/c/Users/admin/Desktop/add_number$ tree dist/
dist/
├── add_number-0.0.1-py3-none-any.whl
└── add_number-0.0.1.tar.gz
0 directories, 2 files
6上传到 pypi 官网
接下来上传到官网:
(base) junjun@JunJunLab:/mnt/c/Users/admin/Desktop/add_number$ python3 -m twine upload dist/*
Uploading distributions to https://upload.pypi.org/legacy/
Enter your username:
接下来输入你的 账号 和 密码 即可,结束后可去 pypi 官网查看并使用 pip 下载使用,这里就不演示了。
大家可以自己去尝试一下。

欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群
哦,数据代码已上传至QQ群,欢迎加入下载。
群二维码:

老俊俊微信:
知识星球:
所以今天你学习了吗?
欢迎小伙伴留言评论!
今天的分享就到这里了,敬请期待下一篇!
最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!
如果觉得对您帮助很大,赏杯快乐水喝喝吧!
往期回顾
◀argparse 传参之 add_argument() 方法
◀...
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!