2015-09-17 5 views
1

Может ли кто-нибудь описать, как кто-то может создать и выполнить пакет zip python в Maya? Много учебников и вопросов относительно этого прыжка в середину и получения определенных знаний. Мне нужен простой пример в качестве отправной точки.Maya Python Создайте и используйте Zipped Package?

Folder/ 
    scriptA.py 
    scriptB.py 
    scriptC.py 

ScriptA: 
    Import ScriptB 
    Import ScriptC 

Create zip of Folder 

In Maya 
    Code to run Folder as if not zipped 
    ScriptA.foo() 

В папке у нас есть три сценария. ScriptA ссылается на два других. Я застегнул папку с помощью программы, такой как winrar. В майа, я хочу загрузить из этого почтового индекса, как если бы файлы внутри были любым другим модулем, сидящим в моей папке скрипта (без разархивирования). Как мне это сделать?

ответ

1

Любой почтовый на вашем питона пути рассматривается как папка, так:

import sys 
sys.path.append('path/to/archive.zip') 

import thingInZip 
thingInZip.do_something() 

Единственная проблема глубина: zipImporter не ожидает, что вложенные структуры каталогов. Так что это нормально:

ziparchive.zip 
    +--- module1.py 
    +----module2.py 
    +----package_folder 
    | 
    +-- __init.__py 
    +-- submodule1.py 
    +-- submodule2.py 
    +--- subpackage 
     | 
     +- __init__.py 

Но это не так:

ziparchive.zip 
+ --- folder 
    +- just_a_python_file_not_part_of_a_package.py 

также site модуль не может добавлять тракты внутри застежка-молния. Обходной путь here. Вам также, вероятно, нужно будет внимательно следить за порядком вашего sys.path: вы хотите убедиться, что знаете, работаете ли вы из застрявшего или из свободных файлов на вашем диске.

Вы можете сэкономить место, заархивировав только файлы .pyc вместо всего этого, кстати.

PS остерегайтесь использования оставшихся слеши в sys.path.append: они должны быть экранированы \\ - правая косая черта работы на обоих окнах и * IX

+0

Мысль эта работала, но майа хватал файл ВПГ. После того, как я удалю pyc, он не загрузится. У меня есть модуль под названием Timeline внутри, а функция, которую я хочу вызвать, - это тайлер. Если я сделаю это и попробую Timeline.timeliner(), я не получу модуль с именем Timeline. –

+0

Если вы видели pyc, это, вероятно, означает, что ваши рабочие файлы (вне zip) были на пути. Вам нужно убедиться, что ваш zip имеет то, что вам нужно, и вставляется в sys.path, как указано выше. Вы можете удостовериться, что почтовый индекс появляется перед свободными файлами с помощью sys.path.insert (0, 'путь/to/zip.zip') – theodox

+0

Это майя 2011+ да? Не старше? – theodox

Смежные вопросы