前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[超详细] 手把手带你发布自己的专属模块!

[超详细] 手把手带你发布自己的专属模块!

作者头像
编程文青李狗蛋
发布2019-07-15 16:02:26
3420
发布2019-07-15 16:02:26
举报
本文字数:4321 字

阅读本文大概需要:7 分钟

00.写在之前

我们在写代码的时候,有时会开发出一个让自己觉得牛x闪闪的模块,自我陶醉已经满足不了自己蠢蠢欲动的心,只想赶紧让更多的人知道,毕竟分享是一种优秀的品德(实际是为了享受一波彩虹屁。

那么该如何发布这个模块呢?这就是接下来我要分享的内容。

01.模块 -> 压缩包

我们要将模块制作成压缩包,这里一共有 3 个步骤:

  1. 创建 setup.py;
  2. 构建模块;
  3. 生成发布压缩包。

创建 setup.py,具体内容如下所示:

代码语言:javascript
复制
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='完整的增加和删除模块' # 完整的描述信息
)

上述的字典参数只是其中的一部分,关于详细信息可以参考官方网站:

代码语言:javascript
复制
https://docs.python.org/3/distutils/apiref.html

setup.py 创建完成以后,我们可以在解释器中输入下面的代码来「构建模块」:

代码语言:javascript
复制
python3 setup.py build

回车以后会出现如下的提示信息:

代码语言:javascript
复制
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 目录下所有的文件就是我们最终打包的压缩包里面包含的文件。

最后一步就是生成「发布压缩包」:

代码语言:javascript
复制
python3 setup.py sdist

同样回车以后会产生一些提示信息:

代码语言:javascript
复制
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 把我们的压缩包做一个解压:

代码语言:javascript
复制
tar zxvf rocky_module-1.0.tar.gz

回车以后提示信息如下所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
sudo python3 setup.py install

同样回车以后会产生提示信息:

代码语言:javascript
复制
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__,这个就可以查看模块的完整路径:

所以进入安装目录就是如下所示:

代码语言:javascript
复制
cd /Users/rocky/PycharmProjects/module/venv/lib/python3.6/site-packages/

接下来就是执行删除操作:

代码语言:javascript
复制
sudo rm -r rocky_module*

PS:rocky_module* 是删除以 rocky_module 为开头的所以文件。

现在我们再在 ipython 中验证一下是否删除成功:

导入模块报错,证明我们删除成功。

无处不在的「单例设计模式」

我们都知道的「字典」,到底可以用来做什么?

曾经,我被这些陷阱坑的找不着北...

直到面试被问到什么是「共享引用」,我才发现对于它的一无所知...

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

本文分享自 Python空间 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档