赞
踩
一个模块可以包含类、方法、变量等。导入模块时查找模块的顺序:
Python 的包不一定需要 __init__.py 文件。有 __init__.py 文件存在的称为普通包,没有 __init__.py 存在的称为命名空间包。
__init__.py 作用:标识该目录是一个 Python 的模块包;简化模块导入操作。
实际上,如果目录中包含了 __init__.py 时,当用 import 导入该目录时,会执行 __init__.py 里面的代码。这样我们可以在 __init__.py 文件中批量导入我们所需要的模块,而不再需要一个一个的导入。__init__.py 中还有一个重要的变量,__all__, 它关联了一个模块列表,用来限制模块导入,只有指定的属性、方法、类可以被导入。当执行 from 包 import * 时,就会导入其中 __init__.py 中 __all__ 列表中的模块。若没有定义 __all__ 属性,则导入模块中所有的公有属性、方法、类。
有 __init__.py 文件的包可以看作是一个模块。
当前工作目录(Current Working Directory,cwd),又叫资源搜索目录,Python 中用相对路径 “.” 表示当前目录。程序当前工作目录为启动程序时所在的目录,改变启动程序时的目录,“.” 代表的目录也会变,因此使用时要当心。
当前工作目录查看方法:
import os
print(os.getcwd())
# 或者
print(os.path.abspath('.'))
模块搜索路径,指通过 import 导入模块的路径。模块第一搜索路径为所执行的 Python 文件所在的目录,而不是当前工作目录。因此,模块第一搜索路径不随当前工作目录改变而改变。
使用以下命令查看模块搜索路径:
import sys
sys.path # 是一个列表,列出模块搜索路径
sys.path 包含以下内容,且搜索模块时按照以下顺序搜索:
在引入模块时,会执行一次模块的内容。
# import 方法导入时创建一个命名空间,通过这个命名空间访问模块中的方法、类、变量
import 模块[ as 模块的别名]
import 包 # 实际上导入的是包的 __init__.py 文件,包命名空间包不能直接导入
import 模块1,模块2 # 不推荐
以下内容中包可以是普通包,也可以是命名空间包:
# from 语句不创建命名空间,而是将模块中的对象直接导入到当前的命名空间
# from 模块/包 import 模块/函数
from 模块 import 变量、方法、类
from 模块 import * # 从模块中导入所有工具,函数容易和别的模块中的函数重名
from 包 import 模块
from 包.模块 import 变量、方法、类
通过绝对路径引用模块,存在后续改变代码结构或者文件改名时修改工作多的问题。相对路径引用模块不存在这个问题。
有相对路径导入的 .py 文件不可以直接运行,即相对导入只能存在于模块中!
相对路径导入采用以下方法:
# 此处 “.” 在程序运行时表示模块所在的目录,“..” 表示模块所在目录的父目录,“...” 表示模块父目录的父目录
from .模块/包 import 模块、变量、方法、类
from . import 模块 # 同层目录的模块
from .包 import 模块 # 模块位于同层包内部,且不存在子包
from .包.子包 import 模块 # 模块位于同层包内部,且存在子包
# 若模块位于父目录中,则把 “.” 换成 “..”,以此类推!
# 使用相对路径表示的目录不能是项目顶级目录,否则会报错:attempted relative import beyond top-level package
# 因此,一般相对导入只是在同一包下而言的
# 若要导入其它包的模块,则使用 sys.path 添加对应目录
# 解决办法:sys.path 中加入顶级目录,然后从高向低引用
然而,其它文件引用本 .py 文件时,有报错风险!因此,能用绝对路径导入就不要用相对路径导入。当文件夹结构固定,文件只在一个包中互相引用时,推荐使用相对引用。
1.https://www.ycpai.cn/python/abGB99Xq.html
2.https://blog.csdn.net/m0_70813473/article/details/127402951
3.https://www.cnblogs.com/devilmaycry812839668/p/16417409.html
4.https://blog.csdn.net/yongqiangyue/article/details/7707854
5.https://blog.csdn.net/qq_57289939/article/details/127811800
6.https://blog.csdn.net/qdPython/article/details/129144607
7.https://blog.csdn.net/weixin_43958105/article/details/114012590
8.https://wiki.woodpecker.org.cn/moin/PythonEssentialRef8#CA-25bbc0bf9b0da0e01e8ee708a5ecb11c51c69e13_1
9.https://blog.csdn.net/zhouguoqionghai/article/details/99697848
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。