如何发布自己的python包到PYPI?给自己编写工具代码

前言

在我编写某一个项目的时候,时常会发现我又用到了之前某个项目中写过的功能,这个时候只能找到以前的项目,将代码copy到新项目中调用。这是一种非常low的做法,一方面,查找以前的代码,费时费力;另一方面,一看就是初学者喜欢干的,作为一个码龄也算有几年的人,还一直满足于以前这种做法,是没有办法进步的。

网上其实也有许多类似的教程,但总觉得不够简练、友好,很多地方没有解释清楚,因此干脆自己写一个,方便自己也方便他人。

基础准备

完成项目创立、工具代码编写、必要文件添加的操作

创建项目

这部分应该都驾轻就熟,可以直接创建一个目录或者用pycharm创建一个新项目,并在新项目下创建一个同名目录,例如我创建一个cptools项目,如下图所示:

  • 为什么要在项目下新建目录而不是直接将代码放在总目录下?

    总目录下除了存放代码外,一般还会存放README,LICENSE以及自动创建的build目录等,因此用这种方式将代码隔离开

编写工具代码

这时候就可以在项目中编写你的个人代码了,通常来说我们代码主要编写为类和函数两种,方便调用。我简单地创建了一个类和函数,放到一个.py文件中,如下图:

同时为了说明这是一个模块,需要添加一个__init__.py文件,我们经常看到一个包直接提供函数的形式,例如requests.get(),而不是requests.utils.get(),是因为在__init__.py中将该目录下所有文件的方法做了导入。如下图所示,我们将hello_cp.py的所有内容导入,这样我们就可以直接用cptools.hello()去调用hello函数了,如下图:

name属性是指定包名,和目录一样即可

setup.py

这个文件是用于告诉setuptools我们项目的版本号等信息的,创建在项目总目录下即可,如下所示:

LICENSE

LICENSE在github上创建之初可以选择,如下图:

不同的开源协议包含不同的开源要求,具体可自己查询,一般我建议采用GNU v3.0

README.md

这部分是对整个项目的描述,可以编写对项目的介绍,这个时候你的目录应该和我下图显示的类似

打包发布到PYPI

到前面为止,必须的文件我们已经创建完毕,下面就是如何打包和发布的过程。

打包项目

在总目录下执行如下代码

python setup.py sdist

这时候就会生成一个dist目录,如下所示:

发布到PYPI

  • 先点击这里注册一个pypi账号

    需要验证邮箱

  • twine模块上传到pypi

    twine upload dist/*

    如果没有twine,用pip install twine

查看我们的项目

pypi上搜索cptools

这时候说明我们可以用pip install cptools安装我们的模块了

测试模块使用

  • pip install cptools
  • 调用函数

总结

至此,一个完整的python包编写发布过程就结束了,以后有新的内容发布了依然是用相同的方法更新到pypi使用即可,不过记得更新你的版本号和github内容哦~