Blender3D: проблема скрипта Python «ImportError: нет модуля с именем MyModule» - PullRequest
2 голосов
/ 25 октября 2011

Привет, я пытаюсь использовать несколько файлов Python в моем скрипте Blender3D.(например, 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"

Я установил папку «script» Blender3D так, чтобы она указывала на папку, содержащую мойскрипт и MyModule.py.

Спасибо за любую помощь.

J

Ответы [ 3 ]

4 голосов
/ 25 октября 2011

Что-то должно добавить правильный путь к переменной sys.path.Я не знаю его специально для Blender, но в целом вы могли бы добавить его следующим образом:

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

Выбор зависит от условий, в которых вы работаете: если ваш сценарий находится в некотором (для Blender) выделенную папку скриптов, вы можете использовать первую.Если вы запускаете его из (например) папки Program Files, используйте абсолютный путь.

1 голос
/ 26 января 2012

Еще одна вещь, которая у меня сработала, это запуск моего скрипта python с помощью следующей команды терминала

/usr/local/bin/python2.7 path/to/script.py
0 голосов
/ 12 апреля 2014

Еще одно клише, которое я использую, когда у меня есть внешние модули, которые находятся в одном каталоге с файлом .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)

Я вывел его из http://www.blender.org/documentation/blender_python_api_2_59_2/info_tips_and_tricks.html, в котором на самом деле есть ошибка в том, что он использует os.path.basename, когда вам действительно нужно os.path.dirname.

...