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

Python跨目录导入模块遭遇ModuleNotFoundError问题咨询

解决Python跨目录模块导入的ModuleNotFoundError问题

错误原因

你在s1.py中使用的from .p2 import s2是错误的:.代表当前包(p1),而p2是p1的同级包,并非p1的子包,所以Python找不到对应的模块。

修复方案

方案1:使用绝对导入

基于项目根包py_path编写导入语句,确保Python能从根目录定位模块:
修改py_path/p1/s1.py内容:

from py_path.p2 import s2
s2.f2()

注意事项:运行时需要保证py_path所在的父目录在Python的sys.path中。比如你的目录结构是父目录/py_path/...,则需在父目录下执行命令:

python -m py_path.p1.s1

也可以将父目录添加到系统环境变量PYTHONPATH中,这样任意位置都能识别py_path包。

方案2:使用正确的相对导入

利用..表示当前包的父包(即py_path),从而导入同级的p2包:
修改py_path/p1/s1.py内容:

from ..p2 import s2
s2.f2()

注意事项:这种方式不能直接运行s1.py文件,必须将其作为包的一部分启动。需在py_path的父目录下执行:

python -m py_path.p1.s1

直接运行python s1.py会触发错误,因为此时Python不会将该文件视为包的组成部分。

优化包结构(可选)

当前的__init__.py设置基本合理,可根据需求简化:

  • py_path/__init__.py:保留from . import p1, p2或留空均可
  • p1/__init__.py:若需导出s1的内容,建议改为from .s1 import *(添加.避免全局查找)
  • p2/__init__.py:同理改为from .s2 import *

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:45:03