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

Python相对导入报错:如何无硬编码导入跨目录模块?

解决Python相对导入错误及跨目录模块导入问题

问题分析

你当前的核心问题有两个:

  1. 直接运行脚本时,Python无法识别相对导入的父包(报错ImportError: attempted relative import with no known parent package),因为单独运行脚本时,该脚本不属于任何包结构。
  2. 你添加的sys.path只包含了/new/uiautomation/目录,根目录/new/下的apis模块不在搜索路径里,所以无法导入restapi.py。

解决方案

无需硬编码项目目录名new,可以通过动态获取项目根目录并添加到sys.path,再使用绝对导入解决问题:

1. 动态添加项目根目录到sys.path

修改dropdown_test.py中的路径配置代码:

import sys
from os import path

# 从当前脚本路径往上回溯3层,得到项目根目录(/new/)
project_root = path.dirname(path.dirname(path.dirname(path.abspath(__file__))))
# 将根目录加入Python模块搜索路径
sys.path.append(project_root)

2. 使用绝对导入语句替换原有导入

修改导入代码为:

# 导入uiautomation目录下的runner模块
from uiautomation.apis.runner import Runner
# 导入根目录下的restapi模块
from apis.restapi import Login

为什么之前的尝试失败?

  • 相对导入from ..apis.restapi import Login仅适用于脚本作为包的一部分被导入(比如通过python -m uiautomation.testscripts.dropdown_test运行),直接运行脚本时,Python不会将其视为包的成员,因此无法解析相对路径。
  • 你之前添加的sys.path仅包含/new/uiautomation/,根目录下的apis不在搜索范围内,所以from apis.runner import Runner也无法找到正确的模块(它会去/new/uiautomation/apis找,但你要的是/new/apis)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:44:58