msb

メモ的なBlog

[Maya]maya.envにScriptへのパスを書くのが疲れたので自動化してみた

スクリプトフォルダ整理して自分のやらフリーでもらってきたやつやらのスクリプトへのパスを通すのがすごいことになってたので、Pythonでスクリプト書いて、それをuserSetup.py内で呼ぶだけにしてみたのでメモ。

フォルダ階層や設定は以下になってるという想定で説明。
※サブフォルダは無視する
※先頭に「_」の付いたフォルダは除外する
※Maya.envでmyMel/myPythonフォルダへのパス(親フォルダ)だけは通しておく

○myMel
├_bk
├AAA
├BBB
└CCC

○myPython
├_bk
├DDD
├EEE
└FFF

作ったスクリプトの概要は以下

  1. MAYA_SCRIPT_PATH/PYTHONPATHを取得
  2. myMel/myPythonフォルダ以下にあるフォルダのリストを取得
  3. 2で取得したフォルダへのパスが1に入ってるかチェックして無かったら追加

実際のスクリプト例

import os
import sys
import maya.mel as mm

sysMelPath='D:/Script/myMel/'
sysPyPath = 'D:/Script/myPython/'

melBaseLists = os.listdir( sysMelPath )
pyBaseLists = os.listdir(sysPyPath)

sysPyFolder = []

MelPath = os.getenv('MAYA_SCRIPT_PATH').replace('\\', '/')
PyPath = os.getenv('PYTHONPATH').replace('\\', '/')

#Mel
print '==========APPEND MEL PATH=========='
for some in melBaseLists:
    somePath = os.path.join( sysMelPath, some)
    if os.path.isdir(somePath) and some[0] != '_' and somePath not in MelPath:
        MelPath += somePath + ';'
        print somePath
mm.eval('putenv "MAYA_SCRIPT_PATH" "%s";' % MelPath)

#Python
print '==========APPEND PYTHON PATH=========='
for some in pyBaseLists:
    somePath = os.path.join( sysPyPath, some)
    if os.path.isdir(somePath) and some[0] != '_' and somePath not in PyPath:
        sysPyFolder.append( somePath)
        sys.path.append(somePath)
print sysPyFolder

MELとPythonで追加のコマンドと追加する場所が違うので分けました。
あとはuserSetup.py内でこれを呼ぶだけ。
Maya.envの恐ろしい地獄から解放されたー!

Published by

“[Maya]maya.envにScriptへのパスを書くのが疲れたので自動化してみた”. への4件のフィードバック

  1. お初にコメントで、質問させていただきます。よろしくお願いします。

    自分も、自作スクリプトやら人のやらごちゃごちゃになっているので、整理したく思っています。
    そこで、Maya.env に記述しさえすればよいのかもと思っていろいろ調べていますがよくわからず。。。
    Maya.env に、
    MAYA_SCRIPT_PATH=%MAYA_APP_DIR%\scripts\selfMade
    みたいに、記述すれば、selfMade というフォルダ直下を見るだろう、と思っていたのですができません。ちなみに mel のソース先の指定をしたいのです。。。
    間違えをご教授願いたいです。

    from heee

    いいね

    1. もう少し自分で調べてみました。
      mel で
      getenv MAYA_APP_DIR
      としてみたところ、
      C:\Users\*****\Documents\maya
      までしか見ていないことがわかりました。
      通常、通っているものだと思っていました。
      C:\Users\*****\Documents\maya\2016\scripts
      or
      C:\Users\*****\Documents\maya\2016\prefs\scripts
      など。。
      そこで、以下のように記述を変更しました。
      MAYA_SCRIPT_PATH=%MAYA_APP_DIR%\2016\prefs\scripts\selfMade
      すると通りました。
      いかがでしょうか?
      ほかにやり方はございますでしょうか?

      いいね

  2. heeeさん、はじめまして。
    Maya公式Helpによりますと、以下のことが書いてありました。(引用元:https://knowledge.autodesk.com/ja/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2015/JPN/Maya/files/Environment-Variables-File-path-variables-htm.html)

    —————
    MAYA_APP_DIR
    これは、個人的な Maya アプリケーション ディレクトリを定義するための変数です。このディレクトリには、プロジェクトの他、次のような重要な項目が含まれます。

    prefs ディレクトリ
    projects ディレクトリ
    mayaRenderLog.txt
    mayaLog
    mayaJournal
    scripts ディレクトリ
    Maya.env の作成を選択した場合は、このファイルもこのディレクトリに保存されます
    MAYA_APP_DIR はオペレーティング システムからのみ設定できます。Maya.env は使用できません。Mac OS X オペレーティング システムでこの変数を設定した場合、ターミナル(Terminal)ウィンドウから Maya を起動する必要があります。 このようにしない場合、Maya は設定値を使用しません。

    MAYA_APP_DIR 変数を設定しない場合、既定値は次のようになります。

    Windows XP
    ¥Documents and Settings¥¥My Documents¥maya

    Windows Vista および Windows 7
    ¥Users¥¥Documents¥maya

    Mac OS X
    ~/Library/Preferences/Autodesk/maya

    Linux (64 ビット)
    ~/maya
    —————

    つまりMAYA_APP_DIRの規定値はご指摘のように「C:\Users\*****\Documents\maya」までとなっており、「%MAYA_APP_DIR%\2016\prefs\scripts\selfMade」という設定は合っています。
    スクリプトファイルがMAYA_APP_DIRで既定されているところ以外にあるのであれば普通にフルパスで指定するか、ちょっと省略するために以下のように指定することも可能です。
    —————
    basePath=D:\maya\scripts
    MAYA_SCRIPT_PATH=%basePath%\aaaFolder;%basePath%\bbbFolder;
    —————
    参考になれば幸いです。

    いいね

    1. ご返信遅くなりました。
      大変参考になりました。ご多忙にもかかわらず、調べていただきありがとうございました。
      from heee

      いいね

コメントを残す