「Python入门」模块和包
模块和包
如果我们想在编写的代码里重用一些函数的话,就需要用到模块(Module),一个.py
文件就称之为一个模块。
使用模块还可以避免函数名和变量名冲突,相同名字的函数和变量完全可以分别存在不同的模块中。为了避免模块名的冲突,Python又引入了按照目录来组织模块的方法,称为包(Package)。
PackageA
|- __init__.py
|- abc.py
PackageB
|- __init__.py
|- abc.py
比如上面的两个包PackageA
和PackageB
都有abc
模块,但是引入包之后,他们的名字就分别变成了PackageA.abc
和PackageB.abc
,这样就避免了同名模块的冲突。
注意:每一个包目录下都会有一个__init__.py
文件,这个文件是必须存在的,否则Python就会把这个目录当成普通目录,而不是一个包。__init__.py
可以是空文件,也可以有Python代码,__init__.py
本身就是一个模块,它的模块名就是包名。
使用模块
一个模块可以被其他程序导入并运用其功能,Python本身内置了很多模块。
使用模块的第一步,就是导入该模块:
import sys
导入sys
模块后,我们就有了变量sys
指向该模块,利用sys
这个变量,就可以访问sys
模块的所有功能。
导入模块并执行
常见的4种倒入模块的方式:
# 第1种方式
import 模块名
模块名.功能 #执行
# 第2种方式
from 模块名 import 功能 #只导入模块中的一个功能
功能 #执行
# 第3种方式(这一种少使用)
from 模块名 import * #导入模块中的所有功能
功能 #执行
注意:如果导入的多个模块中有名称相同的功能,那么后导入的模块的功能会覆盖先导入的模块的同名功能。
# 第4种方式(模块名太长的时候可以自定义一个短一点的名字)
import 模块名 as 自定义一个名字
自定义一个名字.功能
import
一个模块时,实际上就已经把模块里面的代码执行了一次。
第一行代码
import
模块时就执行了一次,第二行代码调用模块里的函数再执行一次,共两次。
模块中的特殊变量:__name__
(专门用来进行测试的)
在不同的.py
文件中执行,具有不同的值。
在mokuai.py
文件中执行打印__name__
变量:
在main.py
文件中导入mokuai
,可以发现__name__
变量发生了改变:
下面这段代码只在当前模块下直接运行会跑到,其他文件调用该模块则不会跑到:
if __name__ == "__main__":
测试用的代码
模块中的特殊变量:__all__
存放在这个__all__
变量中的内容才可以被文件使用。
类似__xxx__
这样的变量是特殊变量,可以被直接引用,但是有特殊用途。
类似_xxx
和__xxx
这样的函数或变量就是非公开的(private),不应该被直接引用,注意是“不应该”,而非“不能”。
外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。
模块发布
1.mymodule模块
目录结构如下:
.
├── setup.py
├── suba
│ ├── aa.py
│ ├── bb.py
│ └── __init__.py
└── subb
├── cc.py
├── dd.py
└── __init__.py
2.编辑setup.py
文件
py_modules
参数需指明所需包含的py文件:
from distutils.core import setup
setup(name="dongGe", version="1.0", description="dongGe's module", author="dongGe", py_modules=['suba.aa', 'suba.bb', 'subb.cc', 'subb.dd'])
3.构建模块
在命令行中输入以下命令:
python3 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
4.生成发布压缩包
python3 setup.py sdist
打包后,生成最终发布压缩包dongGe-1.0.tar.gz
, 目录结构如下:
.
├── build
│ └── lib.linux-i686-2.7
│ ├── suba
│ │ ├── aa.py
│ │ ├── bb.py
│ │ └── __init__.py
│ └── subb
│ ├── cc.py
│ ├── dd.py
│ └── __init__.py
├── dist
│ └── dongGe-1.0.tar.gz
├── MANIFEST
├── setup.py
├── suba
│ ├── aa.py
│ ├── bb.py
│ └── __init__.py
└── subb
├── cc.py
├── dd.py
└── __init__.py
安装第三方模块
pip
:python工具包管理工具,用于安装和卸载python工具包。
在cmd中输入
- 安装:
pip install xxx
- 卸载:
pip uninstall xxx
输入pip
,查看相关命令: