Python子目录模块无法找到求助(禁用sys.path等方案)
解决Python模块导入问题的方案
核心原因
你的问题出在导入路径的层级逻辑上:scripts和utils是subproject目录下的同级子目录,直接用from utils.utility import *属于绝对导入,Python会从当前执行脚本的路径或系统路径中查找utils模块,但如果直接在scripts目录下运行script.py,Python会把scripts当作根路径,自然找不到上级目录下的utils。
具体解决步骤
- 保留
utils/__init__.py的现有内容(无需修改,这样可以简化后续导入):
from . import utility from .utility import *
- 修改
script.py的导入语句为相对导入
因为script.py和utils是同级目录,使用相对导入语法指定层级关系:
# 方式1:直接导入目标类 from ..utils.utility import 你的类名 # 方式2:借助utils的__init__.py简化导入 from ..utils import 你的类名
- 用模块方式执行脚本
不能直接在scripts目录下运行python script.py,必须从project或subproject目录出发,以模块形式执行:
- 从
project目录运行:
python -m subproject.scripts.script
- 从
subproject目录运行:
python -m scripts.script
额外说明
- 相对导入仅适用于作为模块被加载的脚本,直接运行单个脚本会触发报错,因此必须使用
python -m的模块执行方式。 - 确保
subproject、scripts目录下也存在__init__.py(空文件即可),Python 3.3+虽支持无__init__.py的命名空间包,但保留该文件能让模块结构更清晰,兼容更多场景。
内容的提问来源于stack exchange,提问作者OJT
相关产品推荐
相关产品推荐

