Итак, я работаю над тем, чтобы мы вытаскивали инструменты/плагины для команды в целом. На самом деле у меня работает система, и она полностью динамична, за исключением темы, о которой я собираюсь поговорить (все это делается на python). При запуске Maya проверяет локальную папку на папке на сервере и проверяет, отличаются ли они, обрабатывает и копирует файлы или файлы, которые необходимы, а также удаляет старые плагины, которые мы удаляем на сервере. Система достаточно гибкая, чтобы пользователи могли создавать пользовательские полки всех плагинов, и мы можем организовать папки в задней части, не нарушая полки всех пользователей. Доступ к плагинам осуществляется через раскрывающееся меню в главном интерфейсе Maya, и мы можем свободно добавлять в систему подпапки и плагины без использования кода. Мы также можем организовать порядок, при котором пункты меню и плагины могут отображаться через простую систему нумерации папок.Импорт модулей/скриптов в python
Это все работает нормально, пока я не получаю плагины, когда они импортируют модуль в свою папку, а также динамические. Поэтому, когда я начинаю перемещать папку плагинов вокруг корневого каталога, если у меня есть импортированный модуль, для которого я создал путь, путь импортированных модулей в скрипте плагина теперь не соответствует этой точке. У меня уже есть способ получить правильную информацию о пути к плагину через мою настройку меню. У меня проблема с импортом модуля и доступом к классам в этом модуле.
так Если стандарт для импорта класса соответствующего модуля
from fileName import className
и __import__
пути, который я использую как выглядит.
className = __import__("folderN.folderN.folderN.fileName", {}, {}, ["className"])
Но с этим методом я теряю возможность просто вызвать это имя класса, как я могу, с помощью регулярного метода импорта. Я получил вокруг этого, делая
className = className.className
, но это довольно некрасиво метод и я бы предпочел, чтобы иметь возможность просто импортировать и призовет имя, не делая это дополнительный шаг. Я не очень хорошо знаю этот метод импорта, и я знаю, что с ним что-то не хватает.
Я просто иду об этом процессе импорта неправильно? Есть ли способ заставить его заглянуть в локальный каталог для плагина, не добавляя пути Maya таким образом, я могу просто сделать обычный способ импорта метода без странного пути, который должен измениться в любое время, когда я перемещаю плагин?
Wow thanks!работал как шарм, но что делать, если вы делаете импорт как выражение вместо импорта? Прямо сейчас мне все еще нужно сделать этот уродливый блок кода, где я делаю className = className.className, чтобы иметь возможность вызвать его в коде .... – jredd
'import x as y' просто присваивает результат импортируйте операцию в метку 'y' в пространстве имен импорта. Если вам нужно поддерживать динамическое присвоение ярлыков в пространстве имён импорта, вы можете посмотреть обновление 'globals()' или 'locals()', но на самом деле вам, вероятно, стоит взглянуть на реорганизацию базы кода, чтобы лучше поддерживать ваши потребности в развертывании попытки взломать вашу систему импорта для поддержки динамических путей импорта. –