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

Python相对导入报错:Attempted relative import in non-package 求助

解决Python相对导入的"Attempted relative import in non-package"错误

这个坑我之前也踩过!本质是Python对「包模块」和「单独运行的脚本」的处理逻辑完全不一样,咱们一步步来搞定它:

1. 先把server变成合法的Python包

首先,在你的server目录下创建一个空的__init__.py文件,这样Python才会把它识别成一个可导入的包。现在你的目录结构应该是:

project_root/
└── server/
    ├── __init__.py
    ├── entities.py
    └── config.py

2. 不要直接运行entities.py脚本

相对导入只能在「包内部被导入」或者「作为包模块运行」时生效,如果你直接在server目录下敲python entities.py,Python会把这个脚本当成独立的顶层文件,根本不认为它属于server包,自然就报错了。

正确的运行方式是回到project_root目录(也就是server的父目录),然后用模块方式运行:

python -m server.entities

这样Python就会把server当作一个包,你的from .config import config就能正常工作了。

3. 不想改运行方式?试试绝对导入

如果觉得模块运行太麻烦,也可以把导入语句改成绝对路径。假设你的project_root已经在Python的搜索路径里(比如你就在project_root目录下运行代码),直接改成:

from server.config import config

要是不确定project_root在不在搜索路径里,也可以手动添加:

import sys
from pathlib import Path

# 获取project_root的路径(server的父目录)
project_root = Path(__file__).parent.parent
sys.path.append(str(project_root))

from server.config import config

4. 检查你的工作目录

最后再确认一下:别在server目录里面运行脚本!一定要站在project_root目录下操作,不然Python的模块搜索逻辑会混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:52:29