首页 > 编程 > Python > 正文

python模块导入的细节详解

2020-02-16 00:03:16
字体:
来源:转载
供稿:网友

python模块导入细节

本文主要介绍了关于python模块导入的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧

官方手册:https://docs.python.org/3/tutorial/modules.html

可执行文件和模块

python源代码文件按照功能可以分为两种类型:

用于执行的可执行程序文件 不用与执行,仅用于被其它python源码文件导入的模块文件

例如文件a.py和b.py在同一目录下,它们的内容分别是:

# b.pyx="var x in module b"y=5# a.py:import bimport sysprint(b.x)print(b.y)

a.py导入其它文件(b.py)后,就可以使用b.py文件中的属性(如变量、函数等)。这里,a.py就是可执行文件,b.py就是模块文件,但模块名为b,而非b.py。

python提供了一些标准库,是预定义好的模块文件,例如上面的sys模块。

在此有几个注意点,在后面会详细解释:

    模块b的文件名为b.py,但import导入的时候,使用的名称为b,而非b.py a.py和b.py是在同一个目录下的,如果不在同目录下能否导入? 在a.py中访问b.py模块中的属性时,使用的是b.xb.y 上面都是直接以模块名导入的,python还支持更复杂的包导入方式,例如导入abc/b.py时,使用import abc.b。下一篇文章会详细解释包的导入方式

python模块搜索路径

在a.py中导入模块b的时候,python会做一系列的模块文件路径搜索操作:b.py在哪里?只有找到它才能读取、运行(装载)该模块。

在任何一个python程序启动时,都会将模块的搜索路径收集到sys模块的path属性中(sys.path)。当python需要搜索模块文件在何处时,首先搜索内置模块,如果不是内置模块,则搜索sys.path中的路径列表,搜索时会从该属性列出的路径中按照从前向后的顺序进行搜索,并且只要找到就立即停止搜索该模块文件(也就是说不会后搜索的同名模块覆盖先搜索的同名模块)。

例如,在a.py文件中输出一下这个属性的内容:

# a.py:import sysprint(sys.path)

结果:

['G://pycode', 'C://Program Files (x86)//Python36-32//python36.zip', 'C://Program Files (x86)//Python36-32//DLLs', 'C://Program Files (x86)//Python36-32//lib', 'C://Program Files (x86)//Python36-32', 'C://Users//malong//AppData//Roaming//Python//Python36//site-packages', 'C://Program Files (x86)//Python36-32//lib//site-packages']

python模块的搜索路径包括几个方面,按照如下顺序搜索:

程序文件(a.py)所在目录,即G://pycode 环境变量PYTHONPATH所设置的路径(如果定义了该环境变量,则从左向右的顺序搜索) 标准库路径 .pth文件中定义的路径

需要注意,上面sys.path的结果中,除了

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表