Blender3D:Python脚本问题“ImportError: 没有名为MyModule的模块”

2 投票
3 回答
5367 浏览
提问于 2025-04-17 04:57

你好,我正在尝试在我的Blender3D脚本中使用多个Python文件。(比如 MyScript.py 和 MyModule.py)。MyScript.py 的内容如下:

import bpy
import math
from add_utils import AddObjectHelper, add_object_data
import mathutils

# this line doesn't work
import MyModule

#### REGISTER ####

def register():
    pass

def unregister():
    print("Finished")

if __name__ == '__main__':
    register()

在Blender3D中运行这个脚本时,我遇到了这个错误:

"ImportError: No module named MyModule"

我已经设置了Blender3D的“脚本”文件夹,让它指向包含我的脚本和 MyModule.py 的文件夹。

谢谢你的帮助。

J

3 个回答

0

我常用的一个老生常谈的做法是,当我有一些外部模块和.blend文件放在同一个文件夹里时,可以这样写:

basedir =os.path.dirname(bpy.data.filepath) 
if basedir not in sys.path:
    sys.path.append(basedir)

import marchingCubes

# this next part forces a reload in case you edit the source after you first start the blender session
import imp
imp.reload(marchingCubes)

这个做法是我从这个链接上得到的,不过那个链接里有个小错误,它用到了os.path.basename,其实应该用os.path.dirname

1

还有一个对我有效的方法是用下面这个终端命令来运行我的Python脚本。

/usr/local/bin/python2.7 path/to/script.py
4

需要有某个东西把正确的路径添加到 sys.path 这个变量里。我对Blender具体的情况不太了解,但一般来说,你可以这样添加:

sys.path.append(r'.\mymodule')            # Relative path
sys.path.append(r'C:\path\to\my\module')  # Absolute path

具体用哪个方法取决于你运行的环境:如果你的脚本在Blender专用的脚本文件夹里,你可以用第一个方法。如果你是在比如说 Program Files 文件夹里运行它,就要用绝对路径。

撰写回答