Blender3D: проблема со скриптом Python «Ошибка импорта: нет модуля с именем MyModule»

#python #blender

#python #blender

Вопрос:

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

Комментарии:

1. Если вы печатаете sys.path раньше import MyModule , есть ли путь к вашему модулю в этом списке?

2. хм, нет, это не так. Как бы мне рассказать Blender об этом пути?

Ответ №1:

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

 sys.path.append(r'.mymodule')            # Relative path
sys.path.append(r'C:pathtomymodule')  # Absolute path
  

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

Ответ №2:

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

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

Ответ №3:

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