Cześć Próbuję użyć wielu plików Pythona w skrypcie My Blender3D. (np. myscript.py i mymodule.py). Myscript.py wygląda:

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()

Uruchamianie skryptu w Blender3D, otrzymuję błąd:

"ImportError: No module named MyModule"

Mam folder "skrypt" Blender3d, aby wskazać folder zawierający mój skrypt i myModule.py.

Dzięki za wszelką pomoc.

Jot

2
JimFing 25 październik 2011, 13:29

3 odpowiedzi

Najlepsza odpowiedź

Coś musi dodać odpowiednią ścieżkę do zmiennej sys.path. Nie wiem o tym dla Blendera, ale ogólnie można dodać go w następujący sposób:

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

Ten, który użyć zależy od warunków, w których pracujesz pod: Jeśli skrypt jest w niektórych (dla blendera) dedykowanego folderu skryptów, można użyć pierwszego. Jeśli uruchomisz go z (na przykład) folderu Program Files, użyj ścieżki bezwzględnej.

4
jro 25 październik 2011, 09:37

Kolejną rzeczą, która działała dla mnie, prowadziła swój skrypt Pythona z następującym poleceniem terminali

/usr/local/bin/python2.7 path/to/script.py
1
Ricky 26 styczeń 2012, 05:03

Kolejne kliski, których używam, gdy mam zewnętrzne moduły, które mieszkają w tym samym katalogu z plikiem .Blend to:

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)

Wyprowadziłem go z http://www.blender.org/documentation/blder_Python_api_2_59_2/Info_tips_and_tricks.html, który właściwie ma błąd, który używa os.path.basename, kiedy naprawdę potrzebujesz os.path.dirname.

0
Mutant Bob 11 kwiecień 2014, 20:10