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

从__init__.py导入REDIS遇ImportError:相对导入无已知父包

解决Python相对导入错误:attempted relative import with no known parent package

问题场景

我的项目中有servertools.py文件,代码片段如下:

"""Server tools script"""

from typing import Dict
from types import FunctionType
from . import REDIS


# The rest of it

运行代码时触发以下错误:

Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.2800.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.2800.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\ever\Documents\overgames\app.py", line 11, in <module>
    main()
  File "C:\Users\ever\Documents\overgames\app.py", line 7, in main
    import servertools as dev
  File "C:\Users\ever\Documents\overgames\servertools.py", line 6, in <module>
    from . import REDIS
ImportError: attempted relative import with no known parent package

我尝试改用from overgames import REDIS,但问题依然存在。

解决方案

1. 规范项目包结构

确保项目目录符合Python包规范,必须包含__init__.py文件标记这是一个合法包:

overgames/
    __init__.py
    app.py
    servertools.py
    # REDIS需定义在__init__.py或同级模块中

若REDIS定义在overgames/__init__.py内,直接在servertools.py中使用from overgames import REDIS即可。

2. 手动添加项目路径到Python环境

如果Python找不到overgames包,是因为它不在sys.path列表中。在app.py开头添加以下代码,将项目目录加入环境路径:

import sys
from pathlib import Path

# 将当前脚本的父目录(即overgames所在目录)添加到sys.path
sys.path.append(str(Path(__file__).parent))

完成后from overgames import REDIS即可正常导入。

3. 以模块方式运行脚本

避免直接运行包内脚本,转到项目的父目录(比如C:\Users\ever\Documents\),用-m参数以模块形式启动:

python -m overgames.app

这种方式会让Python将overgames识别为完整包,此时servertools.py中的相对导入from . import REDIS就能正常工作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 00:44:56