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

Python3.10导入失败求助:跨目录模块导入如何实现?

Python跨目录导入问题解决办法

场景说明

项目结构:

project:
  src:
    dirA:
      __init__.py
      dirA_file.py  # 含class A
    dirB:
      __init__.py
      utils:
         __init__.py
         utils_file.py  # 需要导入A
      serve  # 运行入口脚本

运行方式:在project根目录执行python src/dirB/serve

错误原因分析

  1. from src.dirA.dirA_file import A报错:直接运行serve脚本时,Python仅将src/dirB加入模块搜索路径,project根目录不在路径内,无法识别src模块。
  2. 相对导入报错:直接运行脚本时,脚本不被视为包的一部分,相对导入的层级定位会超出顶层包范围,触发"attempted relative import beyond top-level package"错误。

解决方案

方案1:手动添加根目录到搜索路径

在serve脚本开头加入以下代码,将project根目录加入Python模块搜索路径:

import sys
import os

current_script_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.abspath(os.path.join(current_script_dir, '../../'))
sys.path.append(project_root)

之后在utils_file.py中使用绝对导入:

from src.dirA.dirA_file import A

方案2:以包模块方式运行

将serve重命名为serve.py(确保是可导入的模块文件),在project根目录执行以下命令运行:

python -m src.dirB.serve

此时utils_file.py支持两种导入方式:

  • 绝对导入(推荐):
from src.dirA.dirA_file import A
  • 相对导入:
from ...dirA.dirA_file import A

(...表示从当前模块src.dirB.utils.utils_file向上回溯两级到src目录,再定位到dirA)

方案3:通过环境变量指定根目录

运行脚本前,将project根目录添加到PYTHONPATH环境变量:

Linux/macOS:

export PYTHONPATH=/实际路径/project
python src/dirB/serve

Windows(CMD):

set PYTHONPATH=C:\实际路径\project
python src/dirB/serve

Windows(PowerShell):

$env:PYTHONPATH = "C:\实际路径\project"
python src/dirB/serve

设置完成后,utils_file.py直接用绝对导入即可:

from src.dirA.dirA_file import A

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:55:18