Ich möchte eine setup.py für mein Programm erstellen, da z.B. snapcraft eine verlangt. Sprich: Das Programm soll zu einem normalen Modul werden.
Dabei gibt es jedoch folgende Probleme:
-In einem Modul wird mit relativen imports gearbeitet z.B. from .Beispiel import xyz statt from Beispiel import xyz. Mein Programm soll sich jedoch auch weiterhin durch einfaches ausführen von jdTextEdit.py starten lassen.
-Das Programm hat Plugins (momentan ist nur 1 vorinstalliert) die als Modul geladen werden. Das soll selbstverständlich auch danach noch funktionieren.
Könnte jemand mit Erfahrung in solchen Dingen mal danach sehen?
setup.py für Programm erstellen
Die Sammlung nicht der Konvention entsprechend bennanter Module auf der obersten Ebene sind ungewoehnlich. Das macht man so nicht. Die sollten klein geschrieben werden, und alle in einem Paket mit einem sinnvollen Namen stecken. ZB jdtextedit. Auch die ganzen Unterverzeichnisse und deren Module gehoeren da hinein.
Und dann schreibst du eine setup.py, die einen console_scripts Entry-Point hat. Das erstellt dir dann das notwendige Kommando zum starten. Wenn du trotzdem darauf bestehst ein Skript dafuer zu verwenden, schreib ein *minimales* Skript, das anhand der __file__-Variable das Hauptverzeichnis in sys.path packt, und dann importierst du deine main und rufst die auf.
Und dann schreibst du eine setup.py, die einen console_scripts Entry-Point hat. Das erstellt dir dann das notwendige Kommando zum starten. Wenn du trotzdem darauf bestehst ein Skript dafuer zu verwenden, schreib ein *minimales* Skript, das anhand der __file__-Variable das Hauptverzeichnis in sys.path packt, und dann importierst du deine main und rufst die auf.
Ich habe das Programm jetzt in ein Modul gepackt. Das Ergebnis findet sich hier. Ein Problem gibt es allerdings: Wenn ich es per setup.py installiere, sind die eingebauten Plugins (momentan nur eins) nicht vorhanden. Wenn ich es per ./jdTextEdit.py starte sind sie schon vorhanden. Das ganze lässt sich leicht überprüfen, indem man schaut, ob sich im Bearbeitenmenü der Punkt "Pluginmanager" befindet. Wenn Ja, wurde das Plugin geladen. Das erstellen einer leeren __init__.py im plugins Ordner hat auch nichts gebracht. Kannst du mir da gerade helfen? Die Funktion zum laden der Plugins findet sich in der Functions.py
Ich sehe nicht, wo die Plugins stehen sollten. Laut https://gitlab.com/search?utf8=%E2%9C%9 ... 166126#L15 ist das Asiaten der auf einem Pfad. Der hat sich natürlich geändert. Du solltest so eine Funktionalität per logging dazu bringen zu erzählen was da vor sich geht, denn auch deine User werden so ein Problem haben.
Es gibt zwei Orte, wo die Plugins sein können: Im Ordner "plugins" im Programmverzeichnis (das ist der Ordner, um den es hier geht) und der Ordner "plugins" im Speicherordner, wo die Nutzer, wie in einem Tipp des Tages erwähnt, ihre Plugins hin kopieren können. Beide Ordner werden der sys.path hinzugefügt und die Plugins dann als Modul geladen. Der aktuelle Speicherornder lässt sich für den Nutzer bequem über das ? Menü öffnen.