Python 包或模块的导入

2022-12-10  本文已影响0人  welder77
image.png
https://www.processon.com/view/link/6395b0bf1efad451e01af74d

总结:

  1. 导入包或模块的顺序和范围可以通过打印sys.path来查询到,通过上图的范例可以知道,通常会优先导入.py同目录和父目录下的模块或包,随后再是python安装目录中的site-packages目录下的模块或包。
    p.s. 有时候明明在执行的py文件同目录放了一个包,但最后执行时,还是导入了site-packages目录下的模块或包,这是为什么哪?原因就在于__init__.py或包中又导入了site-packages目录下的模块或包

  2. 导入一个模块时,如果模块中除了函数,类和变量外,也包含一些未缩进的执行语句,如print("xxx"),那么此模块被其他模块导入后,这些执行语句也会被执行。可以通过if __name__ == "__main__":来排除。

  3. 当一个文件夹的根目录,包含了__init__.py,这个文件夹就不是一个文件夹,而是一个Python包了。
    我们可以把整个文件夹理解为一个很大的类,其中的子文件夹或.py文件是这个很大的类中的子类,再小就是这个py文件中包含的函数,类或变量了。
    __init__.py文件默认是空的。但也可以再其中导入一些其他的模块或包。

一个简单的例子:

文件结构如下:
Folder
|- __init__.py
|- filename.py
|- folder2
     |- filename2.py

from folder import filename  #导入filename 模块
或
from folder.folder2 import filename2 #导入filename2 模块
  1. 当我们自己写了一些常用模块或者包,希望自己所有其他的代码都能调用到时,除了把整个包复制到site-packages目录下之外,也可以在site-packages目录下新建一个.pth文件,并在其中指向自己常用模块或者包所在的路径。

  2. from xxx import * 会导入一个模块或包下的所有函数,类或变量,但下划线开头的类,函数或变量除外。

上一篇下一篇

猜你喜欢

热点阅读