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

文件夹内Python导入失败:ModuleNotFound/Import Error问题求助

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

项目结构回顾

ODS/
|__init__.py
|example.py
├── mqtt_model/
│   ├── __init__.py
│   └── mqtt_class.py
└── python-can/
    ├── can-venv/
    ├── __init__.py
    ├── Dockerfile
    ├── mqtt_can_logger.py
    ├── read.py
    ├── requirements.txt
    └── write.py

已知mqtt_model/__init__.py包含from .mqtt_class import MQTT_Model,根目录的example.py能正常用from mqtt_model import MQTT_Model导入,但python-can/mqtt_can_logger.py尝试多种导入方式均报错,要么是相对导入无父包,要么是找不到模块。

可行解决方案

方法1:手动添加项目根目录到Python路径

在mqtt_can_logger.py的最开头添加以下代码,将ODS目录加入Python的模块搜索路径:

import sys
import os
# 获取当前脚本的绝对路径,向上两级找到ODS目录
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

之后就可以直接使用绝对导入:

from mqtt_model import MQTT_Model

这种方法不需要改变运行方式,直接运行mqtt_can_logger.py即可生效。

方法2:以包的形式运行脚本

不要直接运行mqtt_can_logger.py,而是切换到ODS目录下,用Python的模块运行方式执行:

cd ODS/
python -m python-can.mqtt_can_logger

此时可以在mqtt_can_logger.py中使用相对导入:

from ..mqtt_model import MQTT_Model

这种方式符合Python的包导入规范,避免手动修改路径。

方法3:将项目作为可安装包(适合长期维护)

在ODS目录下创建setup.py文件,内容示例:

from setuptools import setup, find_packages

setup(
    name="ODS",
    version="0.1",
    packages=find_packages(),
)

然后在ODS目录下执行安装命令(可编辑模式,方便修改代码):

pip install -e .

安装完成后,无论在哪个目录运行脚本,都可以直接用from mqtt_model import MQTT_Model导入模块。

内容的提问来源于stack exchange,提问作者Adriana Treviño

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:04:58