Python中`from . import xxx`是什么用法,在何时使用?
null
Python中from . import xxx是什么用法,在何时使用?
5 回复
py3 的相对导入,包内的模块导入处于同一顶级包下的模块、包、命名空间用的
这是Python的相对导入语法,专门用在包(package)内部模块之间导入。
简单说,那个点.代表当前包目录。from . import module_a意思就是从当前包里导入module_a模块,而不是从其他地方。
主要使用场景:
-
包内部模块互相引用:比如你的项目结构是这样:
my_package/ __init__.py utils.py core.py在
core.py里想用utils.py的函数,就可以写from . import utils。 -
避免命名冲突:如果系统里有个同名的第三方模块,用相对导入能明确指定要导入的是自己包里的模块。
重要限制:
- 只能用在包内部的模块里(就是有
__init__.py的目录里) - 主脚本(直接用
python script.py运行的)不能用这个语法,会报ImportError
代码示例:
# 项目结构:
# myapp/
# __init__.py
# database.py
# models.py
# 在 models.py 中导入同包的 database.py:
from . import database # 从当前包导入
# 或者
from .database import connect_db # 导入具体函数
# 这等价于(但不完全一样):
# from myapp import database
对比绝对导入:
from . import xxx:相对导入,.指当前包from myapp import xxx:绝对导入,从根包开始指定路径
相对导入让包内模块的相互引用更清晰,特别是包名可能改变或者项目作为子模块被安装时。
一句话建议:在包内模块互相引用时用相对导入,主入口文件用绝对导入。
(.) 相对引用啊
假如当前 package 名是 foo,相当于
from foo import xxxx
相对路径优于绝对路径,否则换个地方就没法引用了

