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

Python模块导入疑问:直接/相对导入失败,sys.path方法为何可行?

Python模块导入问题解析

项目结构

API 
├── Models
│   └── PSU 
|       └── PSUInjector.py
└── Controller 
    └── PSUController.py 

背景信息

需求:在PSUController.py中导入PSUInjector.py里的PSUInjector类,已在/API、/Models、/PSU目录添加__init__.py文件。
运行环境:VS Code虚拟环境,直接在/Controller目录下运行PSUController.py脚本。

尝试的导入方式及报错

  • 绝对导入语句:from Models.PSU.PSUInjector import PSUInjector
    报错:ModuleNotFoundError: No module named 'Models'
  • 相对导入语句:from ..Models.PSU.PSUInjector import PSUInjector
    报错:ImportError: attempted relative import with no known parent package

成功的导入方式

以下代码可实现正常导入:

import sys
sys.path.append("..")
from Models.PSU.PSUInjector import PSUInjector

原因解析

  1. 绝对导入失败的原因:Python的模块搜索路径(sys.path)默认包含当前运行脚本所在的目录(即/Controller),而Models目录位于上级的/API目录下,不在默认的搜索路径中,因此Python无法找到Models模块。
  2. 相对导入失败的原因:相对导入依赖于当前脚本作为某个包的一部分被导入或执行。但直接在/Controller目录下运行PSUController.py时,脚本会被当作顶层脚本执行,Python不会将其视为API包的子模块,自然无法识别..所指向的父包路径。
  3. sys.path方法可行的原因:sys.path.append("..")将/API目录(/Controller的上级目录)添加到了模块搜索路径中,此时Models目录处于Python可搜索到的路径下,绝对导入语句就能正常找到目标类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:57:15