在本文中,我们将讨论用户如何在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__、specfilecachedloader__和__package

如果模块名称是包,那么__name__将设置为module_name +'.main';否则,它将设置为module_name参数。

并且根据模块规范,filecached、__loader__和__package__都会正常设置。

run_path()

run_path()函数用于执行给定路径上文件中的程序,并将模块全局字典作为结果返回。给定的路径可以是Python源文件、已编译的字节码文件或包含__main__模块的有效sys.path条目,例如包括顶级__main__.py文件的zipfile。

在模块执行之前,会在全局字典中设置特殊的全局变量,即__name__、specfilecachedloader__和__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

214-1.png

用户还可以使用run_path()函数:

runpy.run_path('runpy_example.py', run_name='__main__')  

输出:

sum of p, q, r, s, t = 
27

214-2.png

正如前面讨论的那样,runpy还支持Python命令行的-m开关:

C:\python37>python -m runpy_example  

结论

在本文中,我们讨论了用户如何使用Python标准模块runpy的函数来定位并执行模块。

标签: Tkinter教程, Tkinter安装, Tkinter库, Tkinter入门, Tkinter学习, Tkinter入门教程, Tkinter, Tkinter进阶, Tkinter指南, Tkinter学习指南, Tkinter进阶教程, Tkinter编程