Python中模块查找的原理与方法详解
在Python中,模块是一个包含Python定义和声明的文件。在Python程序设计中,模块起着非常重要的作用,常用于组织代码、提高代码的复用性和可维护性。但是,当我们的程序中使用一个模块时,Python到底是如何去寻找并加载这个模块的呢?接下来,我们将详细讲解Python中模块查找的原理与方法。
模块的查找路径
在Python中,模块查找的路径由sys.path变量控制,并由一系列目录组成。这些目录层次通常如下所示:
1. 当前目录
2. 环境变量PYTHONPATH里面所包含的目录(如果这个变量没有设置,Python也会去默认的一些位置寻找)
3. Python默认的安装目录
sys.path可以通过以下代码来查看:
import sys
print(sys.path)
执行结果如下:
['', '/usr/local/Cellar/python@3.9/3.9.6_1/Frameworks/Python.framework/Versions/3.9/lib/python39.zip', '/usr/local/Cellar/python@3.9/3.9.6_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9', '/usr/local/Cellar/python@3.9/3.9.6_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload', '/usr/local/lib/python3.9/site-packages', '/usr/local/Cellar/numpy/1.21.1/libexec/nose/lib/python3.9/site-packages']
模块的查找方法
当Python在sys.path中找到了对应的模块名时,它会查找模块并尝试加载它。在模块中,我们可以使用import语句引入另一个模块,或者使用from语句引入模块中特定的函数或类。Python中模块的查找方法有两种:
import语句
当我们使用import语句导入需要的模块时,Python会在sys.path中按照从前到后的顺序查找模块名对应的文件。在找到文件后,Python会读取文件中的内容,创建一个模块对象,并将这个模块对象存储在sys.modules中。如果在查找的过程中,Python没有找到对应的文件,则会抛出ModuleNotFoundError的异常。
代码示例:
import os
if __name__ == '__main__':
print(os.getcwd()) # 获取当前目录路径
from语句
当我们使用from语句导入模块中特定的函数或类时,Python会首先按照import语句中的方法查找模块,然后找到对应的文件后,读取文件中的内容,并且将结果加入符号表中。然后,Python会按照使用的顺序,从模块中取出相应的对象,并将这个对象添加到当前作用域下。如果在查找的过程中,Python没有找到对应的文件,则会抛出ModuleNotFoundError的异常。
代码示例:
from os import getcwd
if __name__ == '__main__':
print(getcwd()) # 获取当前目录路径
总结
通过本文的讲解,我们了解了Python中模块的查找路径和查找方法,并学习了如何通过import和from语句导入不同模块中的方法和类。当我们开发Python程序时,需要根据实际情况定义好sys.path变量,以保证Python能够找到所需要的模块。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中模块查找的原理与方法详解 - Python技术站