在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。
定义自己的模块
比如有这样一个文件test.py,在test.py中定义了函数add
def add(a,b):
return a+b
调用自己定义的模块
在其他文件中就可以先import test,然后通过test.add(a,b)来调用了,当然也可以通过from test import add来引入
#fileName:main.py
import test
result = test.add(11,22)
print(result)
测试模块
在实际开中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息,例如:
#fileName:test.py
def add(a,b):
return a+b
if __name__ == '__main__': # 用来进行测试
ret = add(12,22)
print('int test.py file,,,,12+22=%d'%ret)
如果此时,在其他py文件中引入了此文件的话,想想看,测试的那段代码是否也会执行呢!
#fileName:main.py
import test
result = test.add(11,22)
print(result)
模块发布
上面的都是简单的例子,学会了模块的制作后下来就是发布了,下面就是例子
mymodule目录结构体如下:
.
├── setup.py
├── suba
│ ├── aa.py
│ ├── bb.py
│ └── __init__.py
└── subb
├── cc.py
├── dd.py
└── __init__.py
编辑setup.py文件
py_modules需指明所需包含的py文件
from distutils.core import setup
setup(name="ylg", version="1.0", description="ylg's module", author="ylg", py_modules=['suba.aa', 'suba.bb', 'subb.cc', 'subb.dd'])
构建模块
执行(window和linux一样)
python setup.py build
构建后目录结构
.
├── build
│ └── lib.linux-i686-2.7
│ ├── suba
│ │ ├── aa.py
│ │ ├── bb.py
│ │ └── __init__.py
│ └── subb
│ ├── cc.py
│ ├── dd.py
│ └── __init__.py
├── setup.py
├── suba
│ ├── aa.py
│ ├── bb.py
│ └── __init__.py
└── subb
├── cc.py
├── dd.py
└── __init__.py
生成发布压缩包
打包后,生成最终发布压缩包ylg-1.0.tar.gz , 目录结构
Windows也可以用压缩软件压缩
.
├── build
│ └── lib.linux-i686-2.7
│ ├── suba
│ │ ├── aa.py
│ │ ├── bb.py
│ │ └── __init__.py
│ └── subb
│ ├── cc.py
│ ├── dd.py
│ └── __init__.py
├── dist
│ └── ylg-1.0.tar.gz
├── MANIFEST
├── setup.py
├── suba
│ ├── aa.py
│ ├── bb.py
│ └── __init__.py
└── subb
├── cc.py
├── dd.py
└── __init__.py
模块安装、使用
- 找到模块的压缩包
- 解压
- 进入文件夹
- 执行命令python setup.py install
注:如果在install的时候,执行目录安装,可以使用python setup.py install --prefix=安装路径
使用和其他模块一样就不说了