前言
不知道大家有没有注意到,当我们自己定义一个模块,然后想在另外一个模块导入这个自定义模块时,那么这两个模块必须要在同一个项目中或者是同一个路径下,这样才能导入,否则就会报模块未定义的错误。然而当我们在使用系统自带的模块比如os或是已安装的第三方库(requests)时,不管是在哪里都可以直接导入使用,而不用关心是否是同一个项目或相同的路径下。这是为什么呢,那么如果我们自定义了一个功能通用的模块,想在多个不同的项目中都能使用,是否能像系统自带的那样可以在任意位置使用呢?
模块的构建
假如现在我们整理了一套连接不同数据库操作的功能模块,并且想把这些模块应用到各个不同的项目中,最笨的办法就是在每个项目中把这些模块都复制一份然后在使用,显然这不是最好的办法。下面来介绍另外一个简洁的办法,就是把我们写好的模块进行一个发布,打包和安装,这样就可以直接导入使用了。下面就来简单的说一下模块的发布步骤
1. 数据库操作服务的目录结构如下:
.
|--dbserver
|--sqlserver_help.py
|--mysql_help.py
|--oracle_help.py
|--__init__.py
2. 在dbserver的同级目录下新建setup.py文件,并添加如下代码:
from distutils.core import setup
setup(name='dbserverhelper',version='1.0',description='database server helper',autor='Alvin',py_modules=['dbserver.sqlserver_help','dbserver.mysql_help','dbserver.oracle_help'])
setup函数的参数说明:
name:模块发布后的名称,可以随便定义
version:模块发布后的版本
description:模块的描述信息
author:模块的作者
py_modules:这个参数是一个列表类型,要进行打包发布的这个模块需要包含哪些py文件,即要将哪些模块进行打包发布。格式是包名.模块名,不带后缀
3. 构建模块
打开命令行切换到setup.py所在目录,执行如下语句
python setup.py build
#这里需要注意的是所要构建的目录下一定要包含__init__.py文件,也就是说要打包的目录必须是一个python的包,否则无法进行构建。
构建后的目录结构:
.
|--build
| |--lib
| | |--dbserver
| | | |--sqlserver_help.py
| | | |--mysql_help.py
| | | |--oracle_help.py
| | | |--__init__.py
|
|--dbserver
| |--sqlserver_help.py
| |--mysql_help.py
| |--oracle_help.py
| |--__init__.py
|
|--setup.py
4. 生成发布压缩包
同样在setup.py的同级目录下执行如下语句:
python setup.py sdist
执行完成后会生成一个压缩包:dbserverhelp-1.0.tar.gz。最新目录结构如下:
.
|--build
| |--lib
| | |--dbserver
| | | |--sqlserver_help.py
| | | |--mysql_help.py
| | | |--oracle_help.py
| | | |--__init__.py
|--dist
| |-dbserverhelp-1.0.tar.gz
|
|--MANIFEST
|
|--dbserver
| |--sqlserver_help.py
| |--mysql_help.py
| |--oracle_help.py
| |--__init__.py
|
|--setup.py
以上4步完成后就完成了自定义模块的构建及打包了。
模块的安装
接下来就可以安装我们的模块了,首先找到上面步骤中生成的dbserverhelp-1.0.tar.gz压缩包并解压到任意位置,然后进入到解药后的文件夹打开cmd执行如下命令:
python setup.py install
#注意:如果在install的时候需要指定安装目录,可以使用:
python setup.py install --prefix=安装路径
模块的导入
前面已经介绍过几种模块的导入方式,这里自定义的模块也是一样,可以通过import xxx导入或通过from xxx import xxx的方式导入。
这样就可以实现自定义模块的打包安装及使用了。