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
相关产品推荐
相关产品推荐

