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

通过内部脚本运行工具时相对导入报错的解决方案咨询

问题描述

开发工具时碰到导入管理的麻烦:既要用launcher.py启动GUI,又得让其他项目能调用manager.py的功能。用了相对导入后,外部项目调用没问题,但运行launcher.py时,window.py里的from ..core.manager import Manager会报错attempted relative import beyond top-level package。

项目结构

tool_name
  launcher.py
  core
    manager.py
  ui
    window.py
  utils
    operators.py

相关代码

launcher.py

from ui.window import Window
gui = Window()

window.py

from ..core.manager import Manager

class Window():
    def __init__(self):
        self.manager = Manager()

manager.py

from ..utils import operators

class Manager():
    # ...
    def addition(self, a, b):
        return operators.sum(a+b)

外部项目调用代码(可正常运行)

import sys
sys.path.append("path/to/tool/parent/folder")
from tool_name.core.manager import Manager
Manager()
最简洁修复方案

方案1:把launcher.py移到项目目录外

调整后的项目结构:

parent_folder
  launcher.py
  tool_name
    core
      manager.py
    ui
      window.py
    utils
      operators.py

修改launcher.py的导入语句:

from tool_name.ui.window import Window
gui = Window()

这样运行launcher.py时,tool_name会被识别为顶级包,内部的相对导入能正常工作,外部项目的调用方式也不用改。

方案2:以包模块的方式启动launcher.py

不用调整文件结构,在tool_name的父目录下执行启动命令:

python -m tool_name.launcher

同时修改launcher.py的导入语句为基于包的绝对导入:

from tool_name.ui.window import Window
gui = Window()

这种方式不用移动文件,只改启动命令和导入语句,同样兼容外部项目调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:30:14