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

同目录Python模块导入报错:ModuleNotFoundError: No module named 'odsrw'求助

问题描述

尝试将ods_extractor.py中的ODSFileExtractor类导入到main.py中,已在odsrw文件夹内创建__init__.py并导入该类,但运行main.py时出现错误:

ModuleNotFoundError: No module named 'odsrw'

相关代码

__init__.py代码:

from .ods_extractor import ODSFileExtractor

__all__ = ['ODSFileExtractor',]

main.py代码:

from odsrw import ODSFileExtractor


def main():
    file_extractor = ODSFileExtractor()
    file_extractor.extract()

if __name__ == '__main__':
    main()

文件结构

src
└───odsrw
    │   main.py
    │   ods_extractor.py
    │   ods_reader.py
    │   __init__.py
    │
    └───sqlite_data
            db_functions.py
            db_setup.py
            models.py
            __init__.py

问题原因与解决办法

核心问题

你运行main.py时,Python的当前工作目录是odsrw文件夹,而非src文件夹。此时用from odsrw import...的绝对导入方式,Python会在系统包目录或当前工作目录下寻找odsrw模块,但当前目录就是odsrw,自然找不到同名模块。

三种解决方式

方式1:改用相对导入并以包形式运行

修改main.py的导入语句为相对导入:

# main.py
from .ods_extractor import ODSFileExtractor
# 或者简化为
from . import ODSFileExtractor

注意:不能直接在odsrw目录下执行python main.py(Python禁止对主脚本使用相对导入),需要回到src目录,用包运行命令:

cd src
python -m odsrw.main

方式2:手动添加src到Python模块路径

如果想直接在odsrw目录下运行main.py,在文件开头添加代码,把src目录加入Python的搜索路径:

# main.py 开头新增
import sys
import os
# 获取当前文件所在目录的上级目录(即src)
src_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(src_dir)

# 保留原导入语句
from odsrw import ODSFileExtractor

之后直接在odsrw目录下执行python main.py即可。

方式3:调整文件结构(更规范)

把main.py移到src目录下,调整后结构如下:

src
│   main.py
└───odsrw
    │   ods_extractor.py
    │   ods_reader.py
    │   __init__.py
    │
    └───sqlite_data
            ...

此时main.py的导入语句无需修改,回到src目录执行python main.py即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:42:46