You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python相对导入的PEP排序规范及项目场景正确写法咨询

嘿,这个问题问得很实在!我来帮你拆解清楚Python相对导入的排序规范、PEP标准要求,再结合你的项目结构分析那两种写法的问题。

Python相对导入的排序规范与PEP要求

一、PEP标准的核心要求

首先看PEP 8(Python的代码风格指南)里关于导入的规定:

导入需要按以下分组排序,组与组之间空一行:

  1. 标准库导入
  2. 第三方库导入
  3. 本地项目/库的导入

绝对导入是推荐的方式,因为它可读性更强,当导入配置出错时(比如包内目录意外出现在sys.path),能给出更清晰的错误提示。相对导入是允许的,但通常不如绝对导入优先。

针对相对导入本身的排序,PEP 8没有做强制的硬性规定,但社区普遍遵循可读性优先的原则:

  • 如果同时存在绝对导入和相对导入,优先放绝对导入(符合PEP8推荐绝对导入的导向)
  • 如果都是相对导入,一般按模块层级从远到近排序(比如先...(上三级目录),再..(上二级),最后.(同级/上级一级)),或者按业务逻辑相关性排序,但层级顺序是更常见的惯例。

二、你的项目结构分析

先明确你的项目目录层级(假设项目根目录已经在Python的sys.path中):

项目根/
├── core/
│   ├── __init__.py
│   ├── forms.py   # 包含CustomerForm
│   └── models.py  # 包含Person
├── tests/
│   ├── __init__.py
│   └── form_tests/
│       ├── __init__.py
│       └── test_xpto.py  # 当前文件
└── login.py  # 包含DefaultLogin

test_xpto.py的模块路径是tests.form_tests.test_xpto,所以它的相对导入层级是:

  • . 指代tests.form_tests目录
  • .. 指代tests目录
  • ... 指代项目根目录

现在看两种写法的问题:

写法一的问题

from core.models import Person  # 这个是正确的绝对导入
from ..login import DefaultLogin  # 错误!`..`指向tests目录,而login.py在项目根,不在tests下
from ...forms import CustomerForm  # 错误!`...`指向项目根,但根目录下没有forms.py,forms在core/里

这里后两行的相对导入路径完全错误:

  • 要导入根目录的login.py,应该用...login(或者更推荐绝对导入from login import DefaultLogin)
  • 要导入core.forms里的CustomerForm,正确的绝对导入是from core.forms import CustomerForm,相对导入的话是...core.forms import CustomerForm(但完全没必要用相对,绝对导入更清晰)

写法二的问题

from ...forms import CustomerForm  # 同样错误,根目录没有forms.py
from ..login import DefaultLogin  # 错误,tests目录没有login.py
from core.models import Person  # 这个绝对导入是对的

除了最后一行的绝对导入正确,前两行的相对导入路径都错了,而且排序也不符合社区惯例(绝对导入应该放在相对导入之前)。

三、正确的写法示例

按照PEP8的推荐,优先用绝对导入,写法如下:

# 本地项目绝对导入,按模块相关性排序(core相关在前,根目录的login在后)
from core.models import Person
from core.forms import CustomerForm
from login import DefaultLogin

如果一定要用相对导入(不推荐,但满足需求的话),正确的写法+规范排序应该是:

# 先层级最远的相对导入(根目录的core和login),再近的(这里没有更近的)
from ...core.models import Person
from ...core.forms import CustomerForm
from ...login import DefaultLogin

内容的提问来源于stack exchange,提问作者Aipi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:53:43