Python模块和包
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块让你能够有逻辑地组织你的 Python 代码段。把相关的代码分配到一个模块里能让你的代码更好用,更易懂。模块能定义函数,类和变量,模块里也能包含可执行的代码。就是不同的功能分一个文件来写。
参考:
Python3 模块 | 菜鸟教程 (runoob.com)
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。其实就是Python源文件。
模块让你能够有逻辑地组织你的 Python 代码段。
把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
模块能定义函数,类和变量,模块里也能包含可执行的代码。
就是不同的功能分一个文件来写。
import 语句
模块的引入
模块定义好后,我们可以使用 import 语句来引入模块,语法如下:
import module1[, module2[,... moduleN]]
比如要引用模块 math,就可以在文件最开始的地方用 import math 来引入。在调用 math 模块中的函数时,必须这样引用:
模块名.函数名
当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。
搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块 support.py,需要把命令放在脚本的顶端:
test.py 文件代码: #!/usr/bin/python # -*- coding: UTF-8 -*- # 导入模块 import support # 现在可以调用模块里包含的函数了 support.print_func("Runoob")
以上实例输出结果:
Hello : Runoob
一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
当我们使用 import 语句的时候,Python 解释器是怎样找到对应的文件的呢?
这就涉及到 Python 的搜索路径,搜索路径是由一系列目录名组成的,Python 解释器就依次从这些目录中去寻找所引入的模块。
模块的搜索路径
当导入一个模块时,Python 会按照以下顺序查找模块:
当前目录。
环境变量
PYTHONPATH
指定的目录。Python 标准库目录。
.pth
文件中指定的目录。搜索路径是在 Python 编译或安装的时候确定的,安装新的库应该也会修改。
给模块起别名
使用 as 关键字为模块或函数起别名:
import numpy as np # 将 numpy 模块别名设置为 np from math import sqrt as square_root # 将 sqrt 函数别名设置为 square_root
这个别名关键字as在异常里也能被使用,比如
>>> def this_fails(): x = 1/0 >>> try: this_fails() except ZeroDivisionError as err: print('Handling run-time error:', err) Handling run-time error: int division or modulo by zero
上面的except ZeroDivisionError as err:里的as就是这种用法。
from…import 语句
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:
from modname import name1[, name2[, ... nameN]]
例如,要导入模块 fib 的 fibonacci 函数,使用如下语句:
from fib import fibonacci
这个声明不会把整个 fib 模块导入到当前的命名空间中,它只会将 fib 里的 fibonacci 单个引入到执行这个声明的模块的全局符号表。
from…import* 语句
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:
from modname import *
这提供了一个简单的方法来导入一个模块中的所有项目。
不推荐,容易引起命名冲突。
__name__ 属性
注意:__name__两边是两个双下划线,不是一个长下划线。
一个模块被另一个程序第一次引入时,其主程序将运行。
如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用 __name__ 属性来使该程序块仅在该模块自身运行时执行。
#!/usr/bin/python3 # Filename: using_name.py if __name__ == '__main__': print('程序自身在运行') else: print('我来自另一模块')
运行输出如下:
$ python using_name.py 程序自身在运行
$ python >>> import using_name 我来自另一模块 >>>
说明:每个模块都有一个 __name__ 属性。
如果模块是被直接运行,
__name__
的值为__main__
。如果模块是被导入的,
__name__
的值为模块名。说明:__name__ 与 __main__ 底下是双下划线, _ _ 是这样去掉中间的那个空格。
标准模块
Python 本身带着一些标准的模块库,在 Python 库参考文档中将会介绍到(就是后面的"库参考文档")。
模块名 功能描述 math
数学运算(如平方根、三角函数等) os
操作系统相关功能(如文件、目录操作) sys
系统相关的参数和函数 random
生成随机数 datetime
处理日期和时间 json
处理 JSON 数据 re
正则表达式操作 collections
提供额外的数据结构(如 defaultdict、deque) itertools
提供迭代器工具 functools
高阶函数工具(如 reduce、lru_cache) 有些模块直接被构建在解析器里,这些虽然不是一些语言内置的功能,但是他却能很高效的使用,甚至是系统级调用也没问题。
当然, python也有大量的三方库。
Python中的包
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__init__.py 用于标识当前文件夹是一个包。
考虑一个在 package_runoob 目录下的 runoob1.py、runoob2.py、__init__.py 文件,test.py 为测试调用包的代码,目录结构如下:
test.py package_runoob |-- __init__.py |-- runoob1.py |-- runoob2.py
源代码如下:
现在,在 package_runoob 目录下创建 __init__.py:
然后我们在 package_runoob 同级目录下创建 test.py 来调用 package_runoob 包
以上实例输出结果:
package_runoob 初始化 I'm in runoob1 I'm in runoob2
如上,为了举例,我们只在每个文件里放置了一个函数,但其实你可以放置许多函数。你也可以在这些文件里定义Python的类,然后为这些类建一个包。
注意,导入包时,__init__.py会被自动调用。
当导入包时(无论是直接导入包还是包内的模块),Python 会首先执行该包目录下的
__init__.py
文件。执行顺序:
- 先执行父包的
__init__.py
(如果存在多层嵌套包)。- 再执行子包的
__init__.py
。- 最后加载目标模块。
有点类似于“包的构造函数”。
常见的Python项目目录结构规范
涉及python开发的项目,一般可以依照下列目录结构进行设计与开发:
|—— 1.References # 参考文献目录 |—— 2.Project # 项目代码 |——— conf/ # 项目配置目录,所有的静态参数、文件路径、数据库配置等全部放在该目录下 |—— settings.py |—— …… |—— bin/ # 脚本目录,如有需要执行的脚本文件,存放在此处。 |—— test.sh |—— …… |—— common/ # 公共文件目录,存放公共组件函数,如:加密、序列化、以及自定义的函数等 |—— encryption.py |—— …… |—— …… |—— …… |—— log/ # 项目日志目录,用于存放各类日志 |—— main.py # 项目入口文件 |—— README.md # 项目说明文档 |—— requirements.txt # 需要安装的包及版本号 |—— .gitignore # git版本管理配置文件
特别说明:
References:
参考文献目录。如果涉及论文,需要将原论文.pdf版本的文件上传至此。
bin目录: 项目配置文件。所有的静态参数、文件路径、数据库配置等全部放在该目录下。例如:下面是一段读取本地文件的代码(属于静态参数),这部分代码需要在conf目录下创建.py文件进行管理。目录下的py文件可以自定义名称,如settings.py、mysql-settings.py等。
root_path = "/Users/allenpandas/Downloads/PCD-1/" files = os.listdir(root_path)
bin(或者scripts)目录:
脚本目录。项目运行过程中如有需要执行的脚本文件,存放在此处。
common目录:
公共文件目录。用于存放公共组件函数,如:加密、序列化、以及自定义的函数等。
log目录:
日志文件目录。用于存放各类日志文件,项目如有日志输出,必须放在该目录下。
main.py:
项目入口文件。
README.md:
项目说明文档,必须要对项目有详细的说明,包括但不限于项目环境、执行过程、数据流、注意事项等。
requirements.txt:
python包及版本号管理文件。需要将项目运行时,依赖的安装包及包的版本号记录在此,方便其他协作人员通过pip install -r requirements.txt文件安装开发环境。
.gitignore:
Git版本管理配置文件,项目中无需提交的代码文件、目录、日志文件等均需在此标明。

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)