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

Python多目录项目下同目录与跨目录模块导入报错问题咨询

问题成因

Python导入模块时会优先从sys.path记录的路径中查找目标模块,sys.path默认会包含入口脚本所在的目录,也就是你运行main.py时,项目根目录code会被加入sys.path,但core目录不会被自动加入。
你在test1.py中直接写import test2时,Python只会遍历sys.path下的路径找名为test2的模块,不会自动去test1.py自身所在的core目录查找,因此会抛出模块不存在的错误。

小提示:Python 3.3以下版本需要在core、database目录下各新建一个空的__init__.py文件,标识目录为Python包,才能正常执行包导入操作。

解决方法

1. test1.py导入同目录test2.py的两种方案

  • 绝对导入(兼容性更好,推荐使用):
    基于sys.path中已有的项目根目录,从顶层包路径导入:
    from core import test2
    
  • 相对导入(仅适合作为包模块运行,不可单独直接执行test1.py):
    用.表示当前同级目录:
    from . import test2
    

2. test1.py导入database目录下sample.py的两种方案

  • 绝对导入(推荐使用):
    同样基于顶层的code目录路径导入:
    from database import sample
    
  • 相对导入:
    用..表示当前目录的上一级(即code目录),再定位到database包:
    from ..database import sample
    

额外兼容方案

如果你需要单独执行test1.py也能正常导入,可以在test1.py最开头手动把项目根目录加入sys.path:

import sys
from pathlib import Path
# __file__是test1.py的路径,parent.parent就是上层的code目录
sys.path.append(str(Path(__file__).parent.parent.resolve()))

添加这段代码后,你原先写的import test2也能正常运行,导入sample直接写import database.sample即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:45:02