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

如何解决Python项目跨模块导入的ModuleNotFoundError问题

解决Python跨文件夹模块导入问题

一、先修正项目文件名问题

你提供的项目结构里存在重复文件名(example1.py、service1.py各出现两次),这会导致模块识别混乱,先将其修正为example1.py、example2.py和service1.py、service2.py,修正后的结构如下:

exampleProject
├── models   
│   ├── database
│   │   ├── __init__.py
│   │   ├── example1.py
│   │   └── example2.py
└── services
    ├── __init__.py
    ├── service1.py
    └── service2.py

二、生产环境友好的导入方案

1. 使用绝对导入(推荐生产环境)

以项目根目录exampleProject作为导入起点,这是最稳定的跨文件夹导入方式。

从service1.py导入example1.py

在service1.py中编写:

# 导入模块中的指定类/函数
from models.database.example1 import 目标类名/函数名
# 或者导入整个模块
from models.database import example1

从example2.py导入service2.py

在example2.py中编写:

# 导入模块中的指定类/函数
from services.service2 import 目标类名/函数名
# 或者导入整个模块
from services import service2

2. 确保根目录被Python识别的正确方式

生产环境禁止手动用sys.path.append,可以通过两种可靠方式让根目录加入Python的路径列表:

  • 方式一:以根目录为工作目录运行代码
    打开终端切换到exampleProject的上级目录,然后通过模块方式启动代码:

    python -m exampleProject.services.service1
    

    如果有根目录下的入口文件(比如main.py),直接运行即可:

    python main.py
    

    这种方式会自动将当前工作目录加入sys.path。

  • 方式二:将项目安装为可编辑包
    在exampleProject根目录下创建setup.py文件,内容如下:

    from setuptools import setup, find_packages
    
    setup(
        name="exampleProject",
        version="0.1",
        packages=find_packages()
    )
    

    然后在终端执行:

    pip install -e .
    

    这样项目会被安装到Python环境中,任何位置都能直接使用绝对导入,是生产环境的最优实践。

三、新增文件夹后的导入规范

后续新增文件夹时,遵循以下规则即可实现无缝跨文件夹导入:

  • 每个新增文件夹都保留__init__.py文件(Python 3.3+支持无该文件的命名空间包,但保留可提升兼容性和明确性)
  • 始终使用绝对导入,从项目根目录开始逐层指定模块路径
  • 避免使用容易产生歧义的相对导入(比如from ..xxx import yyy,不同运行环境下可能出错)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:32:13