Python基础之模块和包
本节将介绍Python中的模块和包的概念及基本用法。
模块
简单来说模块就是一个python文件,我们可以将一些常量、函数、类等封装到一个模块中,然后在程序中使用该模块。模块类似Java中的包(package),目的是组织代码结构,重用代码等。
命名
模块的命名应该采用小驼峰方式,即只包含数字,字母和下划线等字符。其中,模块名应该只包含小写字母,且首字符不能是数字,单词与单词之间用下划线分割。因为在导入模块时模块名会作为程序的一部分,因此模块名必须按规范命名。
导入模块
- import 模块名
- import 模块名 as 别名
- import folder1.folder2...folderN.模块名 [as 别名]。注:当模块在某个目录中时按这种方式导入。
- from 模块名 import 函数/常量/类 [as 别名]。注:只从模块中导入一个函数、常量或类。
- from 模块名 import *。注:从模块中导入所有内容。
对于上面的第4和第5点,导入后的函数、常量、类等内容会直接进入到当前代码的符号列表中。好处是可以直接使用函数、常量和类而不需要指定模块名,缺点是可能有名字冲突。如果有名字冲突新导入的会覆盖开始导入的,可以使用as起一个别名以防止命名冲突。所以使用哪一种导入方式需要根据具体场景来决定。
模块查找顺序
总的来说按照这个顺序查找:当前路径 ./ -> 系统路径 .../Lib/... -> 第三方路径 .../Lib/site-packages, 例如:
import sys
print(sys.path)
运行结果:
D:\work\python_workspace\python_study\basic_08>python module_search.py
['D:\\work\\python_workspace\\python_study\\basic_08', 'D:\\Program Files\\Pytho
n38\\python38.zip', 'D:\\Program Files\\Python38\\DLLs', 'D:\\Program Files\\Pyt
hon38\\lib', 'D:\\Program Files\\Python38', 'D:\\Program Files\\Python38\\lib\\s
ite-packages']
每个模块都应该独立开发,每一个模块都应该是可以被导入的,文件中所有没有缩进的代码在导入时都要被执行。
"__name__"代表模块名,被导入时输出模块名。在当前模块中执行时输出"__main__",一般用于模块的测试。例如:
if __name__ == "__main__":
pass
包
包是一个包含多个模块的特殊文件,是模块的集合,类似Java中的jar。包中有一个特殊文件__init__.py,里面存放包的配置数据。包的命名和模块命名一样,都是小驼峰形式。
导入包
import 包名。可以导入包中所有模块。注意:需要在__init__.py中指定哪些模块会被导入,例如指定:from . import 模块。
如何使用包?
包名.模块名.函数(类、全局变量等)
制作压缩包
制作压缩包的目的是让别人可以使用自己开发的包。
- 构建以下目录结构
setup.py中存放的是编译相关的参数,fibonacci.py是包中的模块,可计算斐波拉契数列,__init__.py中存放的是包的配置,包含可以导出哪些模块。 - setup.py
from distutils.core import setup setup(name='hello_package', version='1.0', description='This is a test hellp package', long_description='This is a test hellp package', author='WXH', author_email='wxhyzh2005@163.com', url='https://blog.csdn.net/funnyrand', py_modules=[ 'hello_package.fibonacci'])
- __init__.py
from . import fibonacci
- 编译包
在目录hello_package_root中执行两个命令:python setup.py build,python setup.py sdist,
编译完成后的目录结构:
可以看出生成了包文件:hello_package-1.0.tar.gz。我们可以把该文件发送给其他人使用。
使用压缩包
假设我们拿到了别人发给我们的包文件hello_package-1.0.tar.gz,按下面步骤使用,
- 解压,命令 tar -zxvf 文件名。注:Linux上使用此命令,windows上直接解压即可。
- 安装包,在解压后的目录中执行命令:python setup.py install,
- 使用新安装的包
- 卸载安装包
到安装目录,把相应的包目录删除即可,一般有两个目录:包目录和包名-<verion>.egg-info,
删除后再导入该包就会报错,
使用pip管理包
如果每次需要某个包的时候都自己去下载然后再安装,这将非常繁琐和复杂,且无法解决包的依赖问题。可以使用pip命令来安装和卸载包。windows上可以在这里下载pip:https://pypi.python.org/pypi/pip#downloads。Ubuntu上可通过命令安装:sudo apt-get install python3-pip。
使用pip安装某个包:pip3 install xxx
使用pip卸载某个包:pip3 uninstall xxx
关于pip的更多细节可以参考:https://www.runoob.com/w3cnote/python-pip-install-usage.html