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

如何从子模块访问另一子模块?Python模块导入报错解决

Python模块与子模块打包访问问题解决

问题场景

文件结构

src \\
|__ module \\
|  |__ sub \\
|  |  |__ __init__.py
|  |  |__ example.py
|  |__ __init__.py
|__ submodule \\
|  |__ __init__.py
|  |__ example_sub.py
|__ __init__.py

代码内容

src/submodule/example_sub.py

def print_example():
    print("I'm src/submodule")

src/module/sub/example.py

from src.submodule.example_sub import print_example

print_example()

执行命令与错误

执行命令:

py .\\module\\sub\\example.py

报错信息:

Traceback (most recent call last):
  File "C:\\Users\\user\\OneDrive\\Desktop\\example\\src\\module\\sub\\example.py", line 1, in <module>
    from src.submodule.example_sub import print_example
ModuleNotFoundError: No module named 'src'

尝试过相对导入(如from ..module import *)但因目标模块层级问题无法访问,切换目录、修改__init__.py均未解决。


解决方案

方法1:从项目根目录以模块方式执行

这是最标准的解决方式:

  1. 切换到src的父目录(即包含src的example目录)
  2. 执行以下命令:
py -m src.module.sub.example

Python会自动将当前目录加入模块搜索路径,src会被识别为顶层包,绝对导入即可正常工作。

方法2:临时修改Python搜索路径(应急方案)

在src/module/sub/example.py开头添加代码,手动将项目根目录加入sys.path:

import sys
import os
# 向上回溯三级目录,获取项目根路径(包含src的目录)
project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.append(project_root)

from src.submodule.example_sub import print_example
print_example()

修改后可直接执行原命令,但此方法属于临时补丁,不推荐用于正式项目。

方法3:使用相对导入并以模块方式执行

调整导入语句为相对导入,同时必须以模块模式运行:

  1. 修改src/module/sub/example.py的导入代码:
from ...submodule.example_sub import print_example

print_example()

(...表示向上回溯两级目录,对应从module/sub到src层级)
2. 切换到src的父目录,执行:

py -m src.module.sub.example

注意:相对导入仅支持模块模式,直接运行脚本(py example.py)会触发错误,因为此时脚本被视为__main__模块,不支持相对导入语法。

方法4:安装为可编辑包(推荐正式开发)

将项目安装为本地可编辑包,彻底解决导入问题:

  1. 在项目根目录(包含src的目录)创建setup.py文件:
from setuptools import setup, find_packages

setup(
    name="my_project",
    version="0.1",
    packages=find_packages(),
)
  1. 执行安装命令:
pip install -e .

安装后,无论在哪个目录,都可以正常使用绝对导入,也能通过py -m命令运行模块。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 22:17:43