Python中`from . import xxx`是什么用法,在何时使用?

null
Python中from . import xxx是什么用法,在何时使用?

5 回复

py3 的相对导入,包内的模块导入处于同一顶级包下的模块、包、命名空间用的


这是Python的相对导入语法,专门用在包(package)内部模块之间导入。

简单说,那个点.代表当前包目录。from . import module_a意思就是从当前包里导入module_a模块,而不是从其他地方。

主要使用场景:

  1. 包内部模块互相引用:比如你的项目结构是这样:

    my_package/
        __init__.py
        utils.py
        core.py
    

    core.py里想用utils.py的函数,就可以写from . import utils

  2. 避免命名冲突:如果系统里有个同名的第三方模块,用相对导入能明确指定要导入的是自己包里的模块。

重要限制:

  • 只能用在包内部的模块里(就是有__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

相对路径优于绝对路径,否则换个地方就没法引用了

回到顶部