импортировать python в pymel

Я работал над своим скриптом Auto-Rig и заметил, что код становится длинным, что затрудняет чтение и сосредоточение внимания на одной части. Я искал импорт файла python и вызывал функции внутри импортированного файла python. Не могу найти способ импортировать файл, может кто-нибудь помочь мне с этим.


person user2134162    schedule 05.03.2013    source источник
comment
напишите thefile.py, а затем в своем скрипте import thefile. Используйте функции, вызывающие thefile.afunction()   -  person joaquin    schedule 05.03.2013
comment
лучший способ — потратить несколько минут на чтение документации python о [наследовании, частных переменных и локальных ссылках класса] [1]. Важно понимать, что объект на любом языке ООП должен иметь данные и поведение [1]: docs.python.org/2/tutorial/classes.html   -  person Ari Gold    schedule 12.09.2016


Ответы (2)


Я рекомендую вам создать модуль Python с вашим файлом Python, а затем сделать это из файла MEL:

python "import my_python_module";

string $pycommand = "my_python_module.my_function(param1, "+ $mel_string_param1 +",\"" + $mel_string_param2 + "\")";

string $result= `python $pycommand`;
person emigue    schedule 12.04.2013

Запишите функции, которые вы хотите включить в свой модуль, в виде файла Python. (совет: не начинайте имя файла Python с цифр).

В моем примере myModule.py содержит:

def myFunc1():
    print 'myFunc1 is called'
    pass

def myFunc2():    
    print 'myFunc2 is called'
    return

Теперь сохраните файл в папке. Мой пример пути к файлу Python:

d:\projects\python\myModule.py

Теперь в редакторе сценариев сеанса Maya введите:

import sys
import os

modulePath = os.path.realpath(r'd:\projects\python\myModule.py')
moduleName = 'myModule'

if modulePath not in sys.path:
    sys.path.append(modulePath)

try:
    reload(moduleName)
except:
    exec('import %s' % moduleName)

Ваш модуль должен быть импортирован.

Теперь позвоните myFunc1() из myModule:

myModule.myFunc1()

Это даст результат:

myFunc1 is called

Теперь вызываем myFunc2() из myModule:

myModule.myFunc2()

Это даст результат:

myFunc2 is called

Если мы сейчас обновим наш myModule.py новой функцией:

def myFunc3():    
        print 'myFunc3 is called'
        return

Нам нужно только запустить тот же код выше, чтобы перезагрузить обновленный модуль.

Теперь мы можем попробовать утверждение:

myModule.myFunc3()

... и получить этот вывод:

myFunc3 is called

person Patrick Woo    schedule 11.09.2016