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

Python自定义包导入报ModuleNotFoundError,神经网络开发求助

解决Python包导入问题:ModuleNotFoundError与包/模块识别问题

问题回顾

你的项目结构如下(修正拼写:scrips应为scripts):

project_root/
├── activations/
│   ├── __init__.py
│   └── Activations.py
├── losses/
│   ├── __init__.py
│   └── Losses.py
├── optimizers/
│   ├── __init__.py
│   └── Optimizers.py
└── scripts/
    └── proffs.py

核心问题:

  • 在scripts目录内运行proffs.py时,执行import activations.Activations报错ModuleNotFoundError: No module named 'activations'
  • 在项目根目录运行时,Python能识别activations但你认为它被当作模块而非包

原因分析

  1. 模块搜索路径问题:当在scripts目录内运行脚本时,Python的默认搜索路径不包含项目根目录,因此找不到上层的activations包。
  2. 包的标识与导入方式:activations是包(因为包含__init__.py),但如果__init__.py为空且导入方式不当,可能会让你误以为它被当作模块。

解决方案

1. 配置包的__init__.py(优化导入体验)

在每个包的__init__.py中导出需要的类/函数,让包的接口更清晰。例如在activations/__init__.py中添加:

# 导入Activations模块中的所有内容,或者指定具体类/函数
from .Activations import *

这样后续导入时可以直接用from activations import Sigmoid, ReLU(假设你的Activations模块里有这些类),无需写全路径。

2. 针对不同运行场景的导入方案

场景一:在项目根目录运行proffs.py

直接使用绝对导入即可,Python会自动将当前工作目录(项目根)加入搜索路径:

# 方式1:导入整个模块
import activations.Activations
# 使用时:activations.Activations.你的类/函数

# 方式2:从包导入模块
from activations import Activations
# 使用时:Activations.你的类/函数

# 方式3:直接导入具体类(需先配置__init__.py)
from activations import ReLU

此时activations是包,你可以通过.访问其内部模块或导出的成员,并非被当作普通模块。

场景二:在scripts目录内运行proffs.py

需要手动将项目根目录添加到Python的搜索路径中,在proffs.py开头添加:

import sys
from pathlib import Path

# 获取项目根目录(scripts的父目录)
project_root = Path(__file__).parent.parent
# 将根目录加入搜索路径
sys.path.append(str(project_root))

# 之后就可以正常导入了
from activations import Activations

3. 遵循PEP8命名规范(可选但推荐)

  • 模块名建议使用小写,例如将Activations.py改为activations.py,避免与包名混淆
  • 类名使用大驼峰,函数/变量名使用小写加下划线,让代码风格更统一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:30:16