Ich mache eine plattformunabhängige PyQt-Anwendung. Ich beabsichtige, setup.py Dateien mit setuptools zu schreiben. Bis jetzt ist es mir gelungen, die Plattform, z. lade spezifische Optionen für Setup() abhängig von der Plattform, um py2exe unter Windows zu verwenden ... etc ...Zugriff auf Datendateien vor und nach distutils/setuptools
Allerdings, mit meiner Anwendung verteile ich einige Themen, HTML und Bilder, muss ich diese Bilder laden in der Anwendung zur Laufzeit. Bisher sind sie im themes/-Verzeichnis der Anwendung gespeichert.
Ich habe Dokumentation über setuptools und distutils gelesen, und herausgefunden, dass wenn ich setup() die data_files Optionen mit allen Dateien in den Themes/Verzeichnis in "share/MyApp/themes /" installiert werden soll würde mit einem/usr/Präfix installiert werden, oder was auch immer sys.prefix auf der Plattform ist. Ich nehme an, dass ich die Datendateien mit os.path.join (sys.prefix, "share", "MyApp", "themes") finden würde, egal, auf welcher Plattform ich bin, oder?
Ich möchte jedoch auch während der Entwicklung auf die Datendateien zugreifen können, wo sie sich im themes/Verzeichnis relativ zur Anwendungsquelle befinden. Wie mache ich das? Gibt es eine kluge Möglichkeit, herauszufinden, ob die Anwendung installiert wurde? Oder ein Dienstprogramm, das den Datendateien zuordnet, unabhängig davon, wo sie sich gerade befinden?
Ich würde wirklich hassen, alle Arten von hässlichen Hacks hinzuzufügen, um zu sehen, ob es Themen relativ zur Quelle gibt, oder in sys.prefix/share ... etc ... Wie finde ich dort Datendateien während der Entwicklung? und nach der Installation auf einer beliebigen Plattform?
def data_file(fname):
"""Return the path to a data file of ours."""
return os.path.join(os.path.split(__file__)[0], fname)
Ich habe dies in der init Py-Datei in meinem Projekt, und es dann von überall in meinem Paket rufe eine Datei relativ zu bekommen:
Wie funktioniert das, wenn data_files in/usr/share/AppName/themes/ installiert sind? Und meine ausführbare Datei ist in etwas wie/usr/lib/AppName Ich würde annehmen ... DistUtils Dokumentation sagt, es wird installiert mit dem sys.prefix als Präfix für den relativen Pfad, dem ich die Datendateien gab, die in ... gespeichert werden sollten. On * nix systems Datendateien sollten sich wahrscheinlich auch in/usr/share/AppName/ – jonasfj
befinden, mit dem ich das verwendet habe Eine Paketdatenoption in setup.py. Nicht sicher über data_files. –
Okay ... Ja, package_data ist auch eine Option ... Vielleicht sollte ich damit gehen ... Ich denke nur nicht, dass es Debian-kompatible Pakete erzeugen wird :) – jonasfj