阅读本文大概需要:7 分钟
00.写在之前
我们在写代码的时候,有时会开发出一个让自己觉得牛x闪闪的模块,自我陶醉已经满足不了自己蠢蠢欲动的心,只想赶紧让更多的人知道,毕竟分享是一种优秀的品德(实际是为了享受一波彩虹屁。
那么该如何发布这个模块呢?这就是接下来我要分享的内容。
01.模块 -> 压缩包
我们要将模块制作成压缩包,这里一共有 3 个步骤:
创建 setup.py,具体内容如下所示:
from distutils.core import setup
setup(
name='rocky_module', # 包名
version='1.0', # 版本
py_modules=['rocky_module.add','rocky_module.delete'],
author='rocky0429', # 作者
author_email='xxxxx@xxx.com', # 作者邮箱
url='https://rocky0429.blog.csdn.net/', # 主页
descriptioin='增加和删除模块', # 描述信息
long_description='完整的增加和删除模块' # 完整的描述信息
)
上述的字典参数只是其中的一部分,关于详细信息可以参考官方网站:
https://docs.python.org/3/distutils/apiref.html
setup.py 创建完成以后,我们可以在解释器中输入下面的代码来「构建模块」:
python3 setup.py build
回车以后会出现如下的提示信息:
running build
running build_py
creating build
creating build/lib
creating build/lib/rocky_module
copying rocky_module/__init__.py -> build/lib/rocky_module
copying rocky_module/add.py -> build/lib/rocky_module
copying rocky_module/delete.py -> build/lib/rocky_module
你会发现在当前目录下多了个 build 目录,build 下有个 lib,lib 下有个 rocky_module 目录:
这就是使用 Python 解释器,在执行 setup.py 时跟上 build 这个参数产生的结果,build 目录下所有的文件就是我们最终打包的压缩包里面包含的文件。
最后一步就是生成「发布压缩包」:
python3 setup.py sdist
同样回车以后会产生一些提示信息:
running sdist
running check
warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)
warning: sdist: standard file not found: should have one of README, README.txt
writing manifest file 'MANIFEST'
creating rocky_module-1.0
creating rocky_module-1.0/rocky_module
making hard links in rocky_module-1.0...
hard linking setup.py -> rocky_module-1.0
hard linking rocky_module/__init__.py -> rocky_module-1.0/rocky_module
hard linking rocky_module/add.py -> rocky_module-1.0/rocky_module
hard linking rocky_module/delete.py -> rocky_module-1.0/rocky_module
creating dist
Creating tar archive
removing 'rocky_module-1.0' (and everything under it)
这时你会发现当前目录下又多了一个 dist 的目录,同时在这个目录下又多个了 .tar.gz 的压缩文件:
至此,我们的模块已经被打包成了一个压缩包,如果我们想要分享,就可以把这个压缩包发送给你想发送的人即可。
02.安装模块压缩包
当其他人拿到我们分享的模块压缩包以后,怎样把我们的模块安装到他自己的开发环境中呢?
其实很简单,只需要两步即可:
第一步:用 tar 把我们的压缩包做一个解压:
tar zxvf rocky_module-1.0.tar.gz
回车以后提示信息如下所示:
x rocky_module-1.0/
x rocky_module-1.0/PKG-INFO
x rocky_module-1.0/rocky_module/
x rocky_module-1.0/rocky_module/delete.py
x rocky_module-1.0/rocky_module/add.py
x rocky_module-1.0/rocky_module/__init__.py
x rocky_module-1.0/setup.py
此时在当前目录下,会产生一个 rocky_module-1.0 的目录,进入到该目录,里面存在如下内容:
一个是 rocky_module 的目录,一个是我们熟悉的 setup.py,还有一个是 PKG-INFO,它是什么呢?我们用 cat PKG-INFO 看一下,里面的内容如下所示:
有没有很熟悉呢?对啦,这就是我们在文章刚开始时给 setup 函数传递的参数。这个文件的好处是什么呢?就是当其他人拿到我们开发的模块时,能够很清楚的知道模块的开发者是谁,怎么才能联系到开发者。
压缩包成功的解压以后,紧接着就是安装这个模块。
第二步:使用 sudo 让 Python解释器以 root 的身份执行 setup.py
sudo python3 setup.py install
同样回车以后会产生提示信息:
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/rocky_module
copying rocky_module/__init__.py -> build/lib/rocky_module
copying rocky_module/add.py -> build/lib/rocky_module
copying rocky_module/delete.py -> build/lib/rocky_module
running install_lib
creating /Users/rocky/PycharmProjects/module/venv/lib/python3.6/site-packages/rocky_module
copying build/lib/rocky_module/delete.py -> /Users/rocky/PycharmProjects/module/venv/lib/python3.6/site-packages/rocky_module
copying build/lib/rocky_module/add.py -> /Users/rocky/PycharmProjects/module/venv/lib/python3.6/site-packages/rocky_module
copying build/lib/rocky_module/__init__.py -> /Users/rocky/PycharmProjects/module/venv/lib/python3.6/site-packages/rocky_module
byte-compiling /Users/rocky/PycharmProjects/module/venv/lib/python3.6/site-packages/rocky_module/delete.py to delete.cpython-36.pyc
byte-compiling /Users/rocky/PycharmProjects/module/venv/lib/python3.6/site-packages/rocky_module/add.py to add.cpython-36.pyc
byte-compiling /Users/rocky/PycharmProjects/module/venv/lib/python3.6/site-packages/rocky_module/__init__.py to __init__.cpython-36.pyc
running install_egg_info
Writing /Users/rocky/PycharmProjects/module/venv/lib/python3.6/site-packages/rocky_module-1.0-py3.6.egg-info
这个时候,整个模块已经被成功的安装到 Python 的系统目录(详见上述提示信息的最后一行)。
口说无凭,我们来验证一下,在终端中进入 ipython,然后导入该模块,如果没有报错,就证明安装成功:
03.卸载模块
能安装就得能卸载,模块安装成功以后,如果我们不想再用了,怎么把这个模块从我们的系统中删除呢?
很简单,同样只需要两步:
第一步:直接进入到安装目录(也就是系统目录)。但是这有一个麻烦点,那就是安装目录很长,一段时间以后并记不得在哪?下面我教大家一个方法能够快速的找到安装目录:
首先我们进入ipython 的交互解释器中,导入该模块,每个模块其实都自带一个内置属性 __file__,这个就可以查看模块的完整路径:
所以进入安装目录就是如下所示:
cd /Users/rocky/PycharmProjects/module/venv/lib/python3.6/site-packages/
接下来就是执行删除操作:
sudo rm -r rocky_module*
PS:rocky_module* 是删除以 rocky_module 为开头的所以文件。
现在我们再在 ipython 中验证一下是否删除成功:
导入模块报错,证明我们删除成功。