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

Python导入同级lib目录内模块触发ModuleNotFoundError如何解决

问题原因

你的推测完全正确:Python运行script.py时,会自动将script.py所在的根目录加入模块搜索路径sys.path,但不会自动加入lib子目录。当utils.py执行from lonlatboxes import lonlatboxes时,Python只会在sys.path包含的路径下搜索lonlatboxes.py,自然找不到存放在lib子目录下的这个文件。
你没有违背Python的导入规则,这只是Python默认模块搜索逻辑的正常表现。

符合需求的解决方案

方案1:修改utils.py的导入语句(最简便,无需新增文件)

直接在utils.py中写全模块的导入路径即可,因为根目录已经在搜索路径中,lib是根目录下的可识别路径:

from sqlalchemy import create_engine # python package
from lib.lonlatboxes import lonlatboxes # 写全从根目录开始的路径

注意:该方案的前提是始终以script.py作为入口运行脚本,若需要单独直接运行utils.py,该方案会报错。

方案2:使用相对导入(推荐,目录结构变化时适配性更高)

在utils.py中使用相对导入,明确指定从当前同级目录导入lonlatboxes:

from sqlalchemy import create_engine # python package
from .lonlatboxes import lonlatboxes # 点号代表当前文件所在的目录

该方案仅需要你在lib文件夹下新增一个空的__init__.py文件即可,新增的空文件没有任何业务逻辑,仅用来标识该文件夹是Python可识别的普通包,完全不属于你担心的“需要打包发布的正式包”范畴,不会增加额外的维护成本。

方案优势

两种方案都完全符合你的要求:

  • 无需把所有文件放在同一文件夹,保持现有目录结构整洁
  • 不需要手动修改sys.path
  • 不需要做复杂的打包配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:45:08