Si vous êtes un du genre à vouloir utiliser des modules python comme des fichiers MEL, à vouloir juste drag and drop un .py dans le viewport maya pour le charger (oui, j’ai souvent eu droit à des « Eh mais python c’est de la *****, c’est pas reconnu par maya sauf si c’est dans le script editor, c’est ******! »), utiliser des petits scripts sans dépendances, tous regroupés dans un fichier, si vous avez peur de vouloir gérer des modules/packages et que vous ne voulez pas vous prendre la tête avec les « import », cet article est fait pour vous!

Enregistrez le code ci-dessous dans un fichier « .py », dans le plugin manager de maya (Window->Settings/Preferences->Plug-in manager), allez chercher le plugin précédemment créé (où placez le dans un des répertoire de plugins que maya va lancer au démarrage) et le tour est joué!
Vous pouvez maintenant drag&drop des fichiers .py (attention, pas .pyc) dans maya!

# -*- coding: utf-8 -*-

import sys
import maya.OpenMayaMPx as mpx


class PyDrop(mpx.MPxFileTranslator):
    registeredName = "pyDrop"

    def __init__(self):
        mpx.MPxFileTranslator.__init__(self)

    @classmethod
    def canBeOpened(cls):
        return False

    @classmethod
    def haveReadMethod(cls):
        return True

    @classmethod
    def filter(cls):
        return "*.py"

    @classmethod
    def defaultExtension(cls):
        return "py"

    def reader(self, file_, optionsString, mode):
        execfile(file_.rawFullName())


def translatorCreator():
    return mpx.asMPxPtr(PyDrop())


def initializePlugin(mobject):
    mplugin = mpx.MFnPlugin(mobject)
    try:
        mplugin.registerFileTranslator(PyDrop.registeredName, None, translatorCreator)
    except:
        sys.stderr.write("Failed to register translator: %s" % PyDrop.registeredName)
        raise


def uninitializePlugin(mobject):
    mplugin = mpx.MFnPlugin(mobject)
    try:
        mplugin.deregisterFileTranslator(PyDrop.registeredName)
    except:
        sys.stderr.write("Failed to deregister translator: %s" % PyDrop.registeredName)
        raise