[PYTHON] Denken Sie an so etwas wie einen systemdynamischen Plug-in-Import.

Es gibt ein "Plug-In" -System zum Hinzufügen von Funktionen in Maya und Photoshop. Es ist ein Memo, dass ich so etwas in meinem eigenen Tool bereitstellen kann.

importlib

Verwenden Sie insbesondere das Modul "import lib".

Durch Übergabe von ** Modulname ** als Zeichenfolge an die Funktion "import_module" dieses Moduls

import hogehoge

Sie können Module unabhängig von ihrer Schreibweise importieren. Da es eine Zeichenfolge erhält, können Sie das Modul, das Sie bei der Eingabe gefunden haben, jederzeit importieren.

Es wird nur ** import_module ** verwendet, also importieren und verwenden Sie es so.

from importlib import import_module

(Die Häufigkeit des Auftretens des Zeichenfolgenimports ...)

Hakenpunkt

1: Versuchen Sie mit einem absoluten Pass zu bestehen

Ich habe falsch verstanden, dass ich eine Python-Datei übergeben habe, also habe ich sie so geschrieben.

pluginPath = 'path/to/plugin'

for plugin in os.listdir(pluginPath):
    mod_path = os.path.join(pluginPath,plugin)
    mod = import_module(mod_path,)

ich hab es nicht ausgearbeitet. Übergeben Sie den Modulnamen. Dazu auch der Speicherort, an dem sich die Python-Datei für den Plug befindet Muss zu sys.path.append hinzugefügt werden. Außerdem muss die Erweiterung der gefundenen Python-Datei entfernt werden. Es wird nur der Modulname übergeben.

pluginPath = 'path/to/plugin'
sys.path.append(pluginPath)

for plugin in os.listdir(pluginPath):
    mod_name = os.path.splitext(plugin)[0]
    mod = import_module(mod_name,)

Jetzt können Sie die Python-Datei zu Ihrem Plugins-Ordner hinzufügen und sie wird importiert.

2: pyc stört

Jetzt importiert es, Wenn Sie es importieren können, können Sie pyc machen. Ich möchte nicht, dass du es liest.

#Unterlassung

for plugin in os.listdir(pluginPath):
    split_name = os.path.splitext(plugin)
    if split_name[1] == '.pyc':
        continue
    mod = import_module(split_name[0],)

Erhöhen Sie die Anzahl der Schaltflächen um die Anzahl der gefundenen Plug-Ins

Ordnen Sie danach so viele Schaltflächen an, wie Sie finden.

Spezifikationen von plugin.py

Es ist keine Spezifikation, aber Wir versprechen im Voraus die Funktion, die Funktion des Plugins zu nutzen. Sie können an "exec", "doIt" oder "run" denken.

Lassen Sie uns auch die Beschriftung auf der Schaltfläche am Modul haben.

plugin.py



LABEL = 'create poly sphere'

"""
some your scripts...
"""

def exec():
    pass

# or

def doIt():
    pass

# or

def run():
    pass

#-----------------------------------------------------------------------------
# EOF
#-----------------------------------------------------------------------------

Verbinden Sie module_name.exec (etc.) mit der Schaltfläche

Mit Taste verbinden

Erstellen Sie einen QPushButton und übergeben Sie die zuvor festgelegte Ausführungsfunktion an .clicked.connect.

btn = QtGui.QPushButton( mod.LABEL )
btn.clicked.connect(mod.exec)

Fügen Sie dies der for-Anweisung hinzu, die das Modul liest.

Zusammenfassung

import os
import sys

from PySide import QtCore, QtGui
from importlib import import_module

pluginPath = 'path/to/plugin'
sys.path.append(pluginPath)

for plugin in os.listdir(pluginPath):
    split_name = os.path.splitext(plugin)
    if split_name[1] == '.pyc':
        continue
    mod = import_module(split_name[0],)

    btn = QtGui.QPushButton( mod.LABEL )
    btn.clicked.connect(mod.exec)

Sie können so etwas irgendwo in das Skript einfügen, das die GUI erstellt.

Immerhin hat es am längsten gedauert Als ich versuchte, den absoluten Pfad zu import_module zu übergeben, stöhnte ich "Ich kann nicht übergeben" Es war ungefähr, als ich ~~ und Plugin als ** pluing ** tippte ...

Lesen Sie die Dokumentation sorgfältig durch!


Klicken Sie hier für den GUI-Teil

Referenz?

Recommended Posts

Denken Sie an so etwas wie einen systemdynamischen Plug-in-Import.
Über den Import
Denken Sie an Aussetzer mit MNIST