Python进阶之import导入机制原理详解
简介
在 Python 中,我们经常需要导入其他模块中的代码以完成各种任务。Python 的 import
机制是实现这一功能的重要手段,可谓是 Python 中非常重要的一部分。通过本篇文章,我们将会具体讲解 Python 的 import
机制原理。
Python import
的分类
Python 中的 import
机制主要可以分为以下几类:
绝对路径导入
当我们想要从 Python 模块搜索路径中直接导入某个模块时,这样的 import
就被称为绝对路径导入。例如:
import module1
from package1 import module2
上述代码中,module1
和 module2
都是绝对路径导入。
相对路径导入
当我们需要从相对路径中导入模块时,我们可以使用相对路径导入。常用的相对路径导入有两类:
- 单点相对导入:以单个句点(
.
)开头表示当前包中的模块。例如from .module1 import func1
。 - 双点相对导入:以双个句点(
..
)开头表示当前模块的父包中的模块。例如from ..module1 import func1
。
动态导入
如果我们不确定需要导入哪个模块,可以使用动态导入。例如:
module_name = "module1"
module1 = __import__(module_name)
上述代码中,我们动态地计算出需要导入的模块名 module_name
,并使用 Python 自带的 __import__
函数动态地导入了模块 module1
。
Python import
的搜索路径
在 Python 中,模块有一个搜索路径列表,Python 会根据这个列表来搜索需要导入的模块。
搜索路径列表的顺序是:
- 程序的主目录(即主程序所在的目录)。
- 环境变量
PYTHONPATH
包含的所有目录。PYTHONPATH
中的每个目录都将被添加到搜索路径中。 - 标准库所在目录。
- 任何
.pth
文件中所列出的目录。 - 默认情况下,Python 安装后自带的一些目录。
我们可以使用 Python 的 sys.path
属性来查看搜索路径列表。例如:
import sys
print(sys.path)
Python import
的执行流程
Python 的 import
语句实际上是一个复合语句,它包括两个步骤:
- 搜索模块。
- 将搜索到的模块载入内存,并将其指定给变量。
搜索模块的过程实际上就是 Python 从搜索路径列表中找到需要导入的模块的过程,Python 内部使用了一个名为 __import__()
的函数来实现这个过程。
具体来说,__import__()
函数会根据导入的模块名逐级向下搜索,直到找到所需的模块或者抛出未找到模块异常 ModuleNotFoundError
为止。
在找到所需的模块之后,Python 会执行这些模块中的代码并将其中的对象放入内存中。这些对象包括模块级别的属性、函数、类等。当运行到 import
语句时,这些对象会被加载到 Python 的内存中,并将其指定给对应的变量。
示例说明
我们通过两个示例来说明 Python 的 import
机制。
示例 1:绝对路径导入
假设我们有以下目录结构:
project/
├── main.py
├── module1.py
└── package1/
├── module2.py
└── __init__.py
module1.py
中定义了一个函数 func1()
,module2.py
中也定义了一个函数 func2()
。我们希望在 main.py
中使用这两个函数。我们可以使用如下的 import
语句:
import module1
from package1 import module2
# 调用 func1()
module1.func1()
# 调用 func2()
module2.func2()
上述代码中,module1
和 module2
都是绝对路径导入。
示例 2:相对路径导入
如果我们希望在 module2.py
中使用 module1.py
中定义的函数,我们可以使用相对路径导入。例如:
# module2.py
from ..module1 import func1
def func2():
func1()
上述代码中,我们使用双点相对导入来导入位于 module1.py
文件中的 func1()
函数。
结论
综上所述,Python 的 import
机制是 Python 中非常重要的一部分。它包括了不同种类的 import
语句,有多种不同的搜索路径,并执行了两个步骤:搜索模块和载入模块。在实际的 Python 开发过程中,我们应当清楚地了解这些内容并加以应用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python进阶之import导入机制原理详解 - Python技术站