AIGC标识 Python import 导入语法

Python import 导入语法详解(区分:相对导入 / 绝对导入 / 路径写法)

先明确核心前提:
Python 的 from ... import ... 语法 不是直接写操作系统文件路径(除特殊库如 importlib),而是基于 Python 包结构 + sys.path 模块搜索路径的模块导入语法

✅ 关键区别:

  • . / ..:属于 Python 包内相对导入语法(仅在作为包运行时生效,不能在顶层主脚本直接运行)
  • / / ./ / ../原生 Python import 语法不能直接写这种操作系统路径!不能写 from ./config import xxx 这种写法(会报错)

前置基础

✅ 什么是 Python 包(package)

文件夹里有 __init__.py 文件(Python3.3+ 支持隐式命名空间包),就是一个 Python 包,可以用 . 做模块层级引用
示例目录结构

my_project/
    ├── main.py          # 顶层主脚本
    ├── config.py        # 顶层配置模块
    └── src/
        ├── __init__.py
        ├── app.py       # 当前脚本
        └── config.py    # src 包内的 config.py

一、6种写法逐个拆解

1. from config import bootstrap_env

✅ 含义:绝对导入,从 Python 全局模块搜索路径里的 config 模块导入

  • Python 会在 sys.path 列表里依次查找 config.py / config
    • 运行 python main.py 时:sys.path 首项是 my_project/,因此可直接导入顶层 config.py
    • 可能匹配:顶层 config.py、第三方库、site-packages 里的模块,不一定是当前目录的 config
  • 适用:顶层脚本、全局模块
  • 本质:按 Python 模块搜索路径的 绝对导入
# main.py
from config import bootstrap_env
  • ❗注意:不是固定同级目录,受运行脚本位置和 sys.path 影响

2. from .config import bootstrap_env

✅ 含义:包内相对导入,当前包(同级目录)里的 config 模块

  • . = 当前所在包目录(和当前脚本同文件夹)
    • src/app.py 中写这句:导入 src/config.py
    • 仅限 Python 包内部使用(文件夹必须被识别为包,存在 __init__.py
    • 不能直接作为顶层脚本运行(不能直接 python src/app.py),会报错 ImportError: attempted relative import with no known parent package
    • ✅ 正确用法:从顶层运行(如 python -m src.app),以包模式运行
# src/app.py
from .config import bootstrap_env
  • 和隐藏文件 .config 完全无关! 这里 . 是语法前缀,不是文件名

3. from ..config import bootstrap_env

✅ 含义:包内相对导入,父目录(上一级包)里的 config 模块

  • .. = 上一层父包目录
    • src/app.py 中写这句:导入 my_project/config.py(src 的上一层目录)
    • 同样仅适用于包模式运行,不能直接单独运行脚本
# src/app.py
from ..config import bootstrap_env
  • ... = 往上两层(极少数场景)

4. ❌ from .config import xxxfrom ./.config import xxx / from .config import xxx(隐藏文件 .config)

.config(带点的文件名,隐藏文件)

如果真的存在一个叫 .config 的隐藏模块文件(.config.py

  • 原生 import 不推荐、也不能直接正常导入以 . 开头命名的模块(不符合 Python 模块命名规范)
  • 不能直接写 from .config import xxx 去匹配隐藏文件 .config.py(会被识别为相对导入语法,不是隐藏文件名)
  • 如需读取隐藏配置文件(如 .env.config):用文件读取(open / python-dotenv),不要用 import 语法

5. ❌ from /config import xxxfrom ./config import xxxfrom ../config import xxx

✅ 原生 Python import 不支持直接写 / ./ ../ 这种操作系统路径写法!直接写会语法报错

  • from /config import xxx → 语法错误,不能直接用
  • ./config../configShell/操作系统路径写法,不属于原生 Python import 语法
    • 如果一定要通过文件路径导入模块(非标准用法):需要用 importlib 库动态加载
    # 示例:动态加载当前目录下的 config.py(非原生 import 写法)
    import importlib.util
    import sys
    spec = importlib.util.spec_from_file_location("config", "./config.py")
    config = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(config)
    bootstrap_env = config.bootstrap_env
    
    • /config:系统根目录下的文件,同样只能用 importlib 加载,不能写进原生 from ... import ...

6. 额外区分:..config(文件名)

  • 文件名是 ..config.py:属于非法模块命名,原生 import 无法正常引用,不推荐使用
    • ../config(上级目录)语法无关

总结对照表格

写法 类型 含义 能否直接原生import 使用前提/坑点
from config import x 绝对导入 按Python全局模块路径查找config模块 受sys.path影响,取决于运行目录
from .config import x 包相对导入 同级包目录下 config.py ✅(包模式) 不能直接单独运行脚本,必须作为包运行
from ..config import x 包相对导入 上一级父包目录下 config.py ✅(包模式) 同上,仅包模式可用
.config.py(隐藏文件) 隐藏配置文件 Unix隐藏文件,不是标准Python模块 ❌原生import不支持 用dotenv/open读取,不要import
/config./config../config 操作系统路径写法 根目录/当前目录/上级目录文件 ❌原生语法不支持 只能用importlib动态加载
..config.py 奇怪命名文件 自定义文件名模块 ❌不符合Python规范 尽量不要这么命名模块

✅最佳实践

  1. 项目推荐:用 绝对导入(如 from src.config import bootstrap_env)或者规范的包相对导入
  2. 环境配置文件(.env / .config):用 python-dotenv 加载,不要用 import
  3. 运行脚本尽量用 python -m 包名.模块名 模式,避免相对导入报错

要不要我给你写一份可直接运行的示例目录结构和导入代码?

posted @ 2026-07-13 12:19  Seryn  阅读(6)  评论(0)    收藏  举报