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

Python项目跨子目录导入模块遇ModuleNotFoundError求助

问题描述

项目目录结构:

main_directory
  main.py
  drivers
    __init__.py
    xyz.py
  utils
    __init__.py
    connect.py

尝试在xyz.py中导入connect.py:

from utils import connect as dc

报错:

ModuleNotFoundError: No module named 'utils'

疑问:不理解为何需要设置路径/目录,认为导入应该自动生效。

解决方法

方法1:使用相对导入

修改xyz.py中的导入语句为相对路径形式(drivers和utils是同级目录):

from ..utils import connect as dc

注意:这种方式下不能直接运行xyz.py,必须以项目根目录main_directory作为顶层包启动,比如在main_directory下执行:

python -m drivers.xyz

或者通过main.py导入drivers.xyz后运行main.py。

方法2:手动添加项目根目录到搜索路径

在xyz.py最开头添加代码,把项目根目录(main_directory)加入Python模块搜索路径:

import sys
import os
# 获取当前文件的父目录的父目录,即main_directory
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

# 之后执行导入
from utils import connect as dc

修改后直接运行xyz.py也能正常找到utils包。

方法3:以项目根目录为入口运行

始终通过main.py作为项目入口,在main.py中导入drivers.xyz:

from drivers import xyz

然后在main_directory下执行:

python main.py

此时Python会自动把main_directory加入搜索路径,xyz.py中的from utils import connect as dc就能正常生效。

为什么需要手动处理路径?

Python的模块搜索路径默认包含:

  • 当前执行脚本所在的目录(不是导入脚本的目录)
  • Python自带标准库目录
  • 第三方库安装目录

如果直接运行drivers/xyz.py,当前执行目录是drivers,main_directory不在搜索路径里,自然找不到上层的utils包。只有当项目根目录在搜索路径中时,Python才能识别utils为顶层包,导入才会自动生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:20:26