Python教程-在Python中查找和执行模块

在本文中,我们将讨论用户如何在Python中查找模块以及用于执行模块的Python函数。
在Python中查找模块
当用户导入模块时,Python解释器会在当前目录中搜索模块。如果在目录中找不到模块,解释器将在名为PYTHONPATH的shell变量中搜索每个目录。如果解释器在shell中找不到它,然后它将检查默认路径。在UNIX中,这个默认路径是:/usr/local/lib/python/。
模块的搜索路径存储在系统模块sys中的sys.path变量中。该变量包含当前目录,即PYTHONPATH,以及与安装相关的默认路径。
PYTHONPATH变量
PYTHONPATH变量是一个基于平台的变量,由目录列表组成。其语法与shell变量的PATH相同。
来自Windows系统的PYTHONPATH:
set PYTHONPATH = c: \\python3\\lib;
来自UNIX系统的PYTHONPATH:
set PYTHONPATH = /usr/local/lib/python
在Python中执行模块
从命令行选项中,使用-m选项用于查找给定模块的路径,并将其执行为程序的__main__模块。runpy模块是Python的标准模块,用于内部支持此机制。runpy模块允许通过Python模块的命名空间而不是文件系统来定位脚本。
runpy模块定义了两个函数:
1.run_module()
2.run_path()
run_module()
run_module()函数用于执行包含特定模块的代码,并返回模块全局字典的结果。
module_name参数应该是实际的模块名称。如果模块名称引用了任何包而不是普通模块,则将导入该包,并执行包内的__main__子模块,然后返回模块全局字典的结果。
在模块执行之前,会在全局字典中设置特殊的全局变量,即__name__、spec、file、cached、loader__和__package。
如果模块名称是包,那么__name__将设置为module_name +'.main';否则,它将设置为module_name参数。
并且根据模块规范,file、cached、__loader__和__package__都会正常设置。
run_path()
run_path()函数用于执行给定路径上文件中的程序,并将模块全局字典作为结果返回。给定的路径可以是Python源文件、已编译的字节码文件或包含__main__模块的有效sys.path条目,例如包括顶级__main__.py文件的zipfile。
在模块执行之前,会在全局字典中设置特殊的全局变量,即__name__、spec、file、cached、loader__和__package。
如果不等于None,则会将__name__变量设置为run_name;否则,它将设置为<run_path>。
示例:
让我们看一个runpy模块的示例:
首先,用户必须将以下文件保存为名为runpy_example.py的脚本。
def add(p, q, r, s, t):
return p + q + r + s + t
def main():
p = 4
q = 6
r = 2
s = 8
t = 7
print ("sum of p, q, r, s, t = ")
print (add(p,q,r,s,t))
return
if __name__=='__main__':
main()
然后,用户将使用以下命令执行上述文件:
import runpy_example as runp
runp.main()
输出:
sum of p, q, r, s, t =
27
尽管如此,用户也可以在不导入它的情况下执行上述文件:
import runpy
runpy.run_module('runpy_example', run_name='__main__')
输出:
sum of p, q, r, s, t =
27
用户还可以使用run_path()
函数:
runpy.run_path('runpy_example.py', run_name='__main__')
输出:
sum of p, q, r, s, t =
27
正如前面讨论的那样,runpy还支持Python命令行的-m
开关:
C:\python37>python -m runpy_example
结论
在本文中,我们讨论了用户如何使用Python标准模块runpy的函数来定位并执行模块。