
在 Maya 中跨模块导入时出现“Module not found”错误,根本原因是缺少 __init__.py 文件——它将普通文件夹标记为 Python 包,是实现相对导入的前提。
在 maya 中跨模块导入时出现“module not found”错误,根本原因是缺少 `__init__.py` 文件——它将普通文件夹标记为 python 包,是实现相对导入的前提。
要在 Maya 项目中(如 lookDev/ 文件夹)成功从一个模块导入另一个模块,必须遵循 Python 的包机制。关键第一步:在目标文件夹(例如 lookDev)中创建空文件 __init__.py(可仅包含注释或留空)。该文件不需任何代码,但它的存在会告诉 Python 解释器:“这是一个可被导入的包”,从而启用相对导入语法。
✅ 正确做法示例(假设目录结构为:project/lookDev/__init__.py, project/lookDev/utils.py, project/lookDev/main.py):
在 main.py 中导入 utils.py 的函数 do_setup:
# main.py(位于 lookDev/ 内) import os from .utils import do_setup # ✅ 相对导入:. 表示当前包 # 调用 do_setup()
⚠️ 注意事项:
- import "foldername"(如 import lookDev)在当前脚本中无效——除非该文件夹在 Python 路径中且已作为顶层包被识别;更常见的是通过 sys.path.append() 或 Maya 的 MAYA_SCRIPT_PATH 配置,但不推荐用于模块内组织。
- 错误写法 from ."moduleinthisfolder" import "function" 中的引号是非法语法:Python 不允许字符串字面量作为模块名,应写为 from .moduleinthisfolder import functionname(无引号)。
- 避免循环导入:若 utils.py 又 from .main import something,将导致 ImportError。模块依赖应保持单向、清晰。
? 进阶控制:通过 __init__.py 统一导出接口
你可以在 lookDev/__init__.py 中显式定义对外暴露的内容,提升可维护性与 API 清晰度:
# lookDev/__init__.py from .utils import do_setup, validate_nodes from .rig_tools import build_joints from . import shaders # 导入整个模块 __all__ = ['do_setup', 'validate_nodes', 'build_joints', 'shaders']
随后,在同级父目录的启动脚本(如 project/run.py)中即可简洁调用:
# run.py(与 lookDev 同级) from lookDev import do_setup, build_joints from lookDev import shaders do_setup() shaders.assign_pbr_shader()
? 小贴士:
- Maya 默认不自动将当前工作目录加入 sys.path,若需从外部导入 lookDev,请先执行:
import sys import os sys.path.insert(0, os.path.dirname(__file__)) # 确保父目录可发现包
- 以 _ 开头的模块或函数(如 _private.py 或 _helper())默认不会被 from module import * 加载,即使列入 __all__ —— 这是 Python 的命名约定,用于标识“内部实现”,应主动使用 from . import _private 显式调用。
综上,__init__.py 是模块化开发的基石。养成在每个逻辑模块文件夹中添加它的习惯,不仅能解决 Maya 中的导入报错,更是构建可复用、可测试、可发布的专业工具链的第一步。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











