[PYTHON] [maya] Comment un maya userSetup.py fonctionne et s'exécute

* Veuillez faire attention à l'article
Ici, c'est le contenu de l'enquête pour savoir "comment ça fonctionne réellement" pour les fonctions et opérations qui sont utilisées comme d'habitude.
En connaissant le mécanisme, nous en saisirons les avantages et les inconvénients, éviterons les problèmes qui se produiront à l'avenir et le développerons en une méthode d'utilisation étendue.
Ce n'est qu'un mémo de l'enquête personnelle. Veuillez noter qu'il peut y avoir des erreurs et des malentendus.

Déclencheur d'enquête

Récemment (à partir de juin 2020), il y a eu des rapports de virus pour maya. Je pense que de nombreuses personnes ont été touchées. Tous ces éléments suivent finalement le comportement de l'application via le fichier de données. Le script qui s'exécute au démarrage est userSetup.py. Et userSetup.py est utilisé comme méthode de paramétrage normal de l'environnement personnel / de production, même s'il ne s'agit pas d'une histoire de virus.

Jusqu'à présent, je me suis souvent concentré sur le côté qui l'utilise comme opération générale, donc Comme c'est un gros problème, j'ai décidé d'étudier le fonctionnement de userSetup.py.

Résultat de l'enquête

J'avais l'habitude de penser que c'était une boîte noire "en quelque sorte", mais c'est un mécanisme très simple.

sys.userSetup sous le dossier de chemin.J'exécute py avec un execfile.

est. C'est tout.

Comment c'est écrit

Le fichier .py correspondant se trouve ci-dessous.

C:\Program Files\Autodesk\Maya2008\Python\Lib\site-packages\maya\app\startup\basic.py
~
C:\Program Files\Autodesk\Maya2020\Python\Lib\site-packages\maya\app\startup\basic.py

Si vous extrayez les pièces nécessaires, ce sera comme suit.

basic.py


def setupScriptPaths():
    # ....réduction....
    
    # Per-version prefs scripts dir (eg .../maya8.5/prefs/scripts)
    prefsDir = cmds.internalVar( userPrefDir=True )
    sys.path.append( os.path.join( prefsDir, 'scripts' ) )
    
    # Per-version scripts dir (eg .../maya8.5/scripts)
    scriptDir = cmds.internalVar( userScriptDir=True )
    sys.path.append( os.path.dirname(scriptDir) )
    
    # User application dir (eg .../maya/scripts)
    appDir = cmds.internalVar( userAppDir=True )
    sys.path.append( os.path.join( appDir, 'scripts' ) )

def executeUserSetup():
    # ....réduction....

    try:
        for path in sys.path:
            scriptPath = os.path.join( path, 'userSetup.py' )
            if os.path.isfile( scriptPath ):
                import __main__
                execfile( scriptPath, __main__.__dict__ )
    except Exception, e:
        sys.stderr.write( "Failed to execute userSetup.py\n" )
        sys.stderr.write( str( e ) )	

Ces fonctions sont appelées et exécutées depuis basic.py (dans les versions récentes batch.py gui.py).

basic.py


# ....réduction....

# Set up sys.path to include Maya-specific user script directories.
setupScriptPaths()

if not os.environ.has_key('MAYA_SKIP_USERSETUP_PY'):
    # Run the user's userSetup.py if it exists
    executeUserSetup()

Qu'en est-il du maya sys.path existant?

Les détails dépendent de votre environnement, mais les dossiers sont à peu près les suivants.

1. 1. Dossier de script du chemin du module (pluriel)
2. dossier (s) de base basé sur python de maya
3. 3. Dossier de script d'environnement utilisateur (pluriel)

J'ai vérifié les éléments suivants dans mon environnement Maya 2018. (Hors spéciaux)

sys.code de confirmation de chemin


import sys
for path in sys.path:
    if not path:
        continue
    print (i)

Exemple d'exécution


C:\Program Files\Autodesk\Maya2018\plug-ins\ATF\scripts
C:\Program Files\Autodesk\Maya2018\plug-ins\MASH\scripts
C:\Program Files\Autodesk\Maya2018\plug-ins\fbx\scripts
C:\Program Files\Autodesk\Maya2018\plug-ins\camd\scripts
C:\solidangle\mtoadeploy\2018\scripts
C:\Program Files\Autodesk\Maya2018\plug-ins\substance\scripts
C:\Program Files\Autodesk\Maya2018\plug-ins\xgen\scripts

C:\Program Files\Autodesk\Maya2018\bin\python27.zip
C:\Program Files\Autodesk\Maya2018\Python\DLLs
C:\Program Files\Autodesk\Maya2018\Python\lib
C:\Program Files\Autodesk\Maya2018\Python\lib\plat-win
C:\Program Files\Autodesk\Maya2018\Python\lib\lib-tk
C:\Program Files\Autodesk\Maya2018\bin
C:\Program Files\Autodesk\Maya2018\Python
C:\Program Files\Autodesk\Maya2018\Python\lib\site-packages

C:\Program Files\Autodesk\Maya2018\bin\python27.zip\lib-tk

C:/Users/rdj/Documents/maya/2018/prefs/scripts
C:/Users/rdj/Documents/maya/2018/scripts
C:/Users/rdj/Documents/maya/scripts

Finalement. Partie à connaître

Il semble que vous deviez prêter attention aux points suivants.

1.userSetup.L'ordre d'exécution de py est sys.dans l'ordre des chemins
2.Documents/maya/userSetup dans le dossier utilisateur comme les scripts.py n'est pas un traitement spécial
Jusqu'au dernier système.userSetup au chemin.Courir aux côtés des autres comme l'un des py
3. 3. Un script python s'exécute dans execfile

Le mécanisme est ouvert au public pour les pièces bonnes et problématiques, ce qui est incroyable. .. ..

Recommended Posts

[maya] Comment un maya userSetup.py fonctionne et s'exécute
Comment utiliser NumPy
[Ubuntu] Comment exécuter un script shell
Comment exécuter des commandes avec Jupyter Notebook
Comment faire fonctionner Linux depuis la console
Comment exécuter des scripts Maya Python
Comment installer pip, numpy sur Autodesk MAYA
Comment faire fonctionner Linux depuis l'extérieur Procédure
Comment écrire une interface graphique à l'aide de la commande maya
Exécuter la fonction Python à partir de Powershell (comment passer des arguments)
Comment exécuter une commande à l'aide d'un sous-processus en Python
Comment faire fonctionner l'API Discord avec Python (enregistrement de bot)
Remarques sur la façon d'utiliser Firefox avec du sélénium sous Windows
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data
Comment utiliser virtualenv
Grattage 2 Comment gratter
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment utiliser le shogun
Comment installer Python
Comment lire PyPI
Comment installer pip
Comment utiliser Virtualenv
Comment utiliser numpy.vectorize
Comment mettre à jour easy_install
Comment installer Archlinux
Comment utiliser pytest_report_header
Comment redémarrer gunicorn
Comment installer python
Comment héberger virtuel
Comment déboguer le sélénium
Comment utiliser partiel
Comment utiliser Bio.Phylo
Comment lire JSON
Comment utiliser SymPy
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment mettre à jour Spyder
Comment utiliser IPython
Comment installer BayesOpt
Comment utiliser virtualenv
Comment utiliser Matplotlib
Comment utiliser iptables
Comment utiliser numpy
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser le dictionnaire {}
Comment utiliser Pyenv
Comment faire pousser des fichiers dot
Comment utiliser la liste []
Comment utiliser python-kabusapi
"Comment compter Fukashigi"
Comment installer Nbextensions
Comment utiliser OptParse
Comment utiliser le retour
Comment installer Prover9
Comment utiliser pyenv-virtualenv