Python3中的进口的作用有哪些

  介绍

这篇文章给大家介绍Python3中的进口的作用有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Python导入的搜索路径

进口的搜索路径为:

<李>

搜索”内置模块”(内置模块)

<李>

搜索系统。路径中的路径

<李>

而sys.path在初始化时,又会按照顺序添加以下路径:

foo。py所在目录(如果是软链接,那么是真正的foo。py所在目录)或当前目录;

环境变量PYTHONPATH环境中列出的目录(类似环境变量路径,由用户定义,默认为空),
网站模块被导入时添加的路径1(站点会在运行时被自动导入)。

导入网站所添加的路径一般是XXX/网站。如果懒得记系统。路径的初始化过程,可以简单的认为进口的查找顺序是:

<强>内置模块

。py文件所在目录
pip或easy_install安装的包

绝对导入和相对导入

绝对导入和相对导入的关系可以类比绝对路径和相对路径。

绝对导入的格式为:

import  A.B   或   得到A  import  B

相对导入格式为:

得到只import  B   或   得到. . A  import  B

其中,点号。代表当前模块,. .代表上层模块,…代表上上层模块,依次类推。

<强>模块的执行方式

模块的执行可以有两种方式:直接执行和以模块执行,即:

python /foo.py示例   或   python  -m 例子。foo

注意,以模块执行时,一定要有包的概念,即例子一定是个包,而foo是这个包下的模块,这样才能顺利执行。

<强>包和模块

模块:一个. py文件就是一个模块(模块)

包:,init . py文件所在目录就是包(包)

各种情形测试

模块直接导入

即模块所在的目录都不是一个包结构,各个模块都是独立的,比如以下的目录结构:

D: \ \ IMPORT_TEST \ TEST1中学习   ├─pack1   │,modu1.py   └─pack2   modu2.py才能

modu1。py中的内容为:

import 系统   sys.path.append (“D: \ \ \ \学习import_test TEST1 \ \ \ \ pack2")   得到modu2  import  hello2   hello2 ()

modu2。py中的内容为:

def  hello2 ():   ,打印(“你好,,小姐:am  module  2“)

注意在modu1中一定加上sys.path。附加那部分内容,即根据上面的描述,一定要让modu1能找到modu2才行,否则就会出现如下错误:

ModuleNotFoundError:没有模块命名& # 39;modu2& # 39;

此时进入pack1目录下,以直接执行或模块执行的方式都可以顺利输出。

包外导入

将上面两个模块所在的目录都变为包结构,即:

D: \ \ IMPORT_TEST \ TEST2学习   ├─pack1   │,modu1.py   │,__init__ . py   └─pack2   modu2.py才能   __init__才能。py

此时也能顺利执行,同时比上面非包结构的多出来一条执行方式,即:

<代码> python - m pack1。modu1

即以包名+模块名的方式执行。

上面两种情形,即模块与模块,包与包都是相互独立的关系,也就没有相对导入的意义。

如果是在一个包内的不同模块的导入,那么最自然的就是使用相对导入。

包内相对导入

D: \ \ IMPORT_TEST \ Test3学习   │,__init__ . py   │   ├─pack1   │,modu1.py   │,__init__ . py   │   └─pack2   modu2.py才能   __init__ . py才能

此时modu1。py中的内容为:

得到. . pack2.modu2  import  hello2   hello2 ()

即将sys.path。添加去掉,因为是在一个包内相互引用,此时这样写没有意义。

此时正确运行的方式是进入Test3上一层的文件夹,然后:

<代码> python - m Test3.pack1。modu1

即明确地告诉解释器模块的层次结构。

而如果采用直接运行的方式,比如:

<代码> python Test3 \ pack1 \ modu1。py

就会报如下错误:

ValueError:尝试相对进口顶级以外包

这是因为,相对导入使用模块的,名字(这里的名字和下面的主要都是有两个下划线的,但是网页显示不出来. .)属性来决定模块在包结构中的位置。当,名字属性不包含包信息(即。没有用& # 39;强生# 39;表示的层次结构,比如& # 39;,主要的),则相对导入将模块解析为顶层模块,而不管模块在文件系统中的实际位置。这里模块被直接运行,则它自己为顶层模块,不存在层次结构,所以找不到其他的相对路径。

Python3中的进口的作用有哪些