Wie ein eigenes Modul bestmöglich weitergeben?

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
Haus

Ich habe vor kurzem damit angefangen mich ein wenig in Python einzuarbeiten und habe ein kleines Programm realisiert. Dieses Programm würde ich gerne weitergeben bzw. anderen zur Verfügung stellen. In Java kann man beispielsweise ein JAR erstellen oder in C++ auf Windows Plattformen eine EXE (wobei ich mich nicht auf eine Plattform festlegen möchte, ich selbst verwende z.B. kein Windows, will aber Windows Benutzern genauso den Zugriff und Einsatz ermöglichen). Ich habe gelesen, dass man z.B. eine Quellcode Distribution per distutils erzeugen kann. Ich habe distutils soweit eigentlich verstanden, jedoch habe ich eine Kleinigkeit noch nicht begriffen: Wie kann man denn bitte per distutils Packages oder Module von Drittherstellern mit einbinden? Ich verwende in meinem Projekt z.B. PyPNG und würde das gerne sofort mit einbinden (ich will also eigentlich nicht voraussetzen, dass der Benutzer dies schon installiert hat). Kann distutils dies überhaupt und falls nicht, gibt es evtl. andere (gar viel bessere) Möglichkeiten um zu meinem gewünschen Ziel zu kommen?
BlackJack

@Haus: Handelt es sich denn nun um ein eigenständiges Programm oder ein Modul das andere Programmierer benutzen können? Im zweiten Fall kannst Du das ganze so gestalten, dass es sich mit `pip` installieren lässt und es in den „Python Package Index” (http://pypi.python.org/) hochladen. Die Abhängigkeiten werden dann von `pip` aufgelöst und gegebenenfalls heruntergeladen und installiert.

Bei einem Programm hängt es sehr stark davon ab was der Endanwender erwartet beziehungsweise was Du ihm zur Verfügung stellen willst. Und dann musst Du entsprechend etwas für die jeweiligen Plattformen zur Verfügung stellen. Also zum Beispiel einen Installer für Windows erstellen.
Haus

BlackJack hat geschrieben:@Haus: Handelt es sich denn nun um ein eigenständiges Programm oder ein Modul das andere Programmierer benutzen können?
Es ist letztendlich doch eher ein Programm anstatt ein Modul. Es soll letztendlich als Kommandozeilenprogramm dienen (nimmt also Parameter des Benutzers auf und führt dann eine Aufgabe durch). Gibt es evtl. für die drei großen Plattformen (Windows, Linux, Mac OS) bestimmte nennenswerte Tools?
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

@Haus: Hier finden sich ein paar zusätzliche Infos zum distutils-Thema: http://docs.python.org/distutils/builtdist.html
Avantasia1975
User
Beiträge: 18
Registriert: Sonntag 19. Mai 2013, 15:26

Ich schliesse mich mal an um kein neuen Thread zu erstelle.
Letztlich hab ich das gleiche Problem. Hab nun auch schon stunden gesucht ohne schlauer zu sein.

Die Situation ist folgende.
Ich habe ein Programm geschrieben, welches Urwid nutzt.
Dieses möchte ich nun meinen Kolegen zur Verfügung stellen. Da Urwid nicht im Standard ist, müssten die Kolegen es erstmal nachinstallieren usw. Da diese keine Ahnung von Python haben und auch nicht sonderlich sicher auf der Konsole sind, würde ich ihnen das gerne ersparen.

Ich suche nun eine Möglichkeit mein Programm inclusive Urwid zur Verfügung zu stellen.
Perfect währe noch die Möglichkeit eine Art installer zu haben womit ich einen Softlink in $PATH erstellen kann.
Bei distutils habe ich das so verstanden, das ein Paket erstellt wird, welches letzlich in site-packages landet und es auch nur um Module bzw. Pakete geht. Das ist ja nicht das, was ich will (ausser bei Urwid ).

Es geht hierbei um Linux und Mac.

Gibt es ein Tool mit dem ich das erreichen kann und wenn ja, welches?
Habt ihr ggf. auch noch nen Link zu einer guten Doku?

Vielen Dank und einen schönen Abend noch.
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Weißt du denn, was deine Kollegen für Linux-Distributionen verwenden? Dann würde ich sagen, dass es wahrscheinlich am allereinfachsten ist, einfach ein .rpm- oder .deb-Paket zu erstellen. Dann müssen sich deine Kollegen um nichts kümmern, nur kurz die Installation anklicken. Und wenn du mal eine neue Version hast, gestaltet sich auch das Update einfacher. Eventuell könntest du sogar noch eine .desktop-Datei erstellen, die dann automatisch mit einem Doppelklick das Programm aufruft (im Terminal). Dann muss man sich gar nicht mehr mit der Kommandozeile beschäftigen.

Bei Python ist es wohl anscheinend normal, dass auch normale Programme in den site-packages-Ordner kopiert werden. In /usr/bin wird dann beispielsweise nur ein kleines Skript kopiert, was dann eben das „Modul“ aus site-packages lädt.

Zu Mac weiß ich nicht wirklich was, aber soweit ich weiß, gibt es dort doch auch diese „Pakete“, oder?
BlackJack

Ergänzend zu dem ``site-packages``: Bei der üblichen ``setup.py`` ist so etwas wie ``/scripts/`` ja schon vorgesehen, also das man eine Bibliothek schreibt und einen Ordner mit einem oder mehreren Skripten hat, die diese Bibliothek benutzen. Also liegt es nahe eine Anwendung als Package zu organisieren, was in einem der Module auch eine `main()`-Funktion hat, und dann ein ganz kurzes Skript dazu zu packen was dieses Modul importiert, die `main()` aufruft, und damit die Anwendung startet. Schönes Beispiel ist IDLE, da besteht das ”Programm” nur aus folgendem:

Code: Alles auswählen

#! /usr/bin/python

from idlelib.PyShell import main
if __name__ == '__main__':
    main()
Avantasia1975
User
Beiträge: 18
Registriert: Sonntag 19. Mai 2013, 15:26

Jo, beim MAC gibt es die Packete auch. Aber wenn es eben kein Standart-Modul ist, muß es ja besorgt werden.

Danke, dann werde ich mir doch mal distutils an tun.

Vielen Dank.


Letztlich stellt sich mir immer noch die Frage, ob wenn ich unter "packages" bei distutils urwid mit angebe, ob es dann auch in dem von mir erstellten PAcket enthalten ist und
ob auch die Abhängigkeiten mit dabei sind?
Antworten