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

Maya中Python相对模块导入失效报错问题求解

问题成因与操作错误

你遇到的导入错误由两个核心问题导致:

  • 包名与导入路径不匹配:你描述中提到scripts目录下存放的文件夹名为packageFolder,但导入语句里写的顶层包名是package,二者不一致会直接导致导入失败。从报错路径看你后续可能将文件夹重命名为了package,但还有第二个更核心的环境兼容问题。
  • Python版本导入规则不兼容:Maya 2020内置运行环境为Python 2.7,你在包的__init__.py中使用的是Python 3风格的全路径绝对导入。Python 2在执行包自身的初始化文件时,包本身还未完成注册到系统模块列表的流程,此时写全顶层包名的导入语句不会优先搜索当前包目录,会直接去全局模块路径下找Classes模块,自然触发找不到模块的报错。
修复方案

二选一即可解决问题:

方案1:使用跨版本兼容的相对导入(推荐)

直接修改package/__init__.py中的导入语句,去掉顶层包名,用相对导入语法指向当前包内的子模块:

# 导入Classes子包下的ExampleClass模块
from .Classes import ExampleClass
# 导入Utils子包下的工具模块同理
from .Utils import SomeUtilModule

语法中开头的.代表当前包所在目录,Python 2和Python 3都能正确识别,不会出现全局路径搜索错误。

方案2:开启绝对导入兼容

如果要保留全路径写法,在__init__.py所有导入语句的最顶部加一行future声明,切换为Python 3风格的导入规则即可:

from __future__ import absolute_import
# 原有导入语句放在声明之后即可正常运行
from package.Classes import ExampleClass
额外注意事项
  • 导入前先确认C:\Users\USERNAME\Documents\maya\2020\scripts路径在Maya的Python搜索路径中,可以在Maya脚本编辑器执行import sys; print(sys.path)查看,默认状态下Maya会自动加载该路径,无需手动添加。
  • 你当前的导入语句from package.Classes import ExampleClass导入的是ExampleClass.py这个模块文件,不是文件内定义的同名类。如果要导入类本身,需要补全路径:from .Classes.ExampleClass import ExampleClass,不要混淆模块名和类名。
  • 修改代码后需要清理Maya的模块缓存,否则会优先加载之前的错误缓存导致修改不生效,可以执行以下代码清理缓存再重新导入,或者直接重启Maya:
import sys
[sys.modules.pop(k) for k in list(sys.modules.keys()) if k.startswith('package')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:12:34