setup.py für Programm erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

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?
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

Kann niemand helfen?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich sehe kein Plugin in Plugins. Nur den Manager darunter, was weird ist.
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

Der Pluginmanger ist selbst ein Plugin. Und momentan das einzige, was vorinstalliert ist.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Eh. Ok. Verstehe ich nicht wirklich :) Aber letztlich musst du das halt debuggen, warum das nach dem verschieben nicht mehr tut. Und das kannst du mit dem logging unterstuetzen.
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

Das Plugin funktioniert problemlos. Wenn ich ich das Program direkt starte, ist alles in Ordnung. Nur das Problem ist, dass die setup.py den Pluginsordner nicht mitzunehmen scheint.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst das auch zu nem Python-Package machen. Da fehlen zB __init__.py, die muessen da rein. Alternativ musst du an den zusaetzlichen Attributen fuer Dateien arbeiten.
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

Dank der __init__.py funktioniert jetzt alles. Danke!
Antworten