JakobDev
Anmeldungsdatum: 11. Dezember 2015
Beiträge: 290
|
Hallo,
ich habe dieses kleine Programm mithilfe von PyQt5 geschrieben. Es ist zwar nicht besonders groß, macht aber was es soll. Das möchte ich jetzt gerne als Snap packen. Ich habe dazu folgende snapcraft.yaml benutzt:
name: jdlangtranslator
version: 1.0
summary: jdLangTranslator
description: |
A translator for .lang files.
base: core18
confinement: strict
grade: stable
parts:
jdlangtranslator:
plugin: qmake
qt-version: qt5
source: .
after: [desktop-qt5]
apps:
jdlangtranslator:
command: jdLangTranslator.py
plugs:
- x11
- home
- browser-support
- desktop-legacy
- desktop
- media-hub
- removable-media
Dieses snapcraft.yaml habe ich auf dieser Seite gefunden. Allerdings bekomme ich folgende Fehlermeldung:
Hit http://repo.steampowered.com/steam precise InRelease
Ign http://repo.vivaldi.com/stable/deb stable InRelease
Hit http://archive.ubuntu.com/ubuntu xenial InRelease
Hit http://archive.canonical.com/ubuntu xenial InRelease
Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
Hit http://repo.vivaldi.com/stable/deb stable Release
Hit http://ppa.launchpad.net/morphis/anbox-support/ubuntu xenial InRelease
Hit http://ppa.launchpad.net/bartbes/love-stable/ubuntu xenial InRelease
Hit http://de.archive.ubuntu.com/ubuntu xenial InRelease
Hit http://de.archive.ubuntu.com/ubuntu xenial-updates InRelease
Hit http://ppa.launchpad.net/webupd8team/indicator-kdeconnect/ubuntu xenial InRelease
Hit http://de.archive.ubuntu.com/ubuntu xenial-backports InRelease
Hit http://deb.playonlinux.com xenial InRelease
Fetched 109 kB in 6s (0 B/s)
Pulling jdlangtranslator
Building jdlangtranslator
qmake LIBS+="-L/tmp/jdLangTranslator/parts/jdlangtranslator/install/lib" LIBS+="-L/tmp/jdLangTranslator/parts/jdlangtranslator/install/usr/lib" LIBS+="-L/tmp/jdLangTranslator/parts/jdlangtranslator/install/lib/x86_64-linux-gnu" LIBS+="-L/tmp/jdLangTranslator/parts/jdlangtranslator/install/usr/lib/x86_64-linux-gnu" INCLUDEPATH+="/tmp/jdLangTranslator/parts/jdlangtranslator/install/usr/include"
Usage: /usr/lib/x86_64-linux-gnu/qt5/bin/qmake [mode] [options] [files]
QMake has two modes, one mode for generating project files based on
some heuristics, and the other for generating makefiles. Normally you
shouldn't need to specify a mode, as makefile generation is the default
mode for qmake, but you may use this to test qmake on an existing project
Mode:
-project Put qmake into project file generation mode
In this mode qmake interprets files as files to
be built,
defaults to *; *; *; *.ts; *.xlf; *.qrc
Note: The created .pro file probably will
need to be edited. For example add the QT variable to
specify what modules are required.
-makefile Put qmake into makefile generation mode (default)
In this mode qmake interprets files as project files to
be processed, if skipped qmake will try to find a project
file in your current working directory
Warnings Options:
-Wnone Turn off all warnings; specific ones may be re-enabled by
later -W options
-Wall Turn on all warnings
-Wparser Turn on parser warnings
-Wlogic Turn on logic warnings (on by default)
-Wdeprecated Turn on deprecation warnings (on by default)
Options:
* You can place any variable assignment in options and it will be *
* processed as if it was in [files]. These assignments will be parsed *
* before [files]. *
-o file Write output to file
-d Increase debug level
-t templ Overrides TEMPLATE as templ
-tp prefix Overrides TEMPLATE so that prefix is prefixed into the value
-help This help
-v Version information
-after All variable assignments after this will be
parsed after [files]
-norecursive Don't do a recursive search
-recursive Do a recursive search
-set <prop> <value> Set persistent property
-unset <prop> Unset persistent property
-query <prop> Query persistent property. Show all if <prop> is empty.
-cache file Use file as cache [makefile mode only]
-spec spec Use spec as QMAKESPEC [makefile mode only]
-nocache Don't use a cache file [makefile mode only]
-nodepend Don't generate dependencies [makefile mode only]
-nomoc Don't generate moc targets [makefile mode only]
-nopwd Don't look for files in pwd [project mode only]
Failed to run 'qmake LIBS+="-L/tmp/jdLangTranslator/parts/jdlangtranslator/install/lib" LIBS+="-L/tmp/jdLangTranslator/parts/jdlangtranslator/install/usr/lib" LIBS+="-L/tmp/jdLangTranslator/parts/jdlangtranslator/install/lib/x86_64-linux-gnu" LIBS+="-L/tmp/jdLangTranslator/parts/jdlangtranslator/install/usr/lib/x86_64-linux-gnu" INCLUDEPATH+="/tmp/jdLangTranslator/parts/jdlangtranslator/install/usr/include"' for 'jdlangtranslator': Exited with code 1.
Verify that the part is using the correct parameters and try again.
Dieser fehler kommt bei beiden im Post beschrieben Methoden. Auch das verlinkte Tutorial hilft nicht wirklich weiter. Kann da wer helfen? Ich habe leider kaum Ahnung von Snap.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
Der Link zum Gitlab-Repo funktioniert nicht (eventuell auf privat gesetzt?). Ich finde es merkwürdig Variablenzuweisungen als Argumente zu übergeben, das sollte vorher passieren und die Referenz auf die Variable kann dann als Argument genutzt werden.
|
JakobDev
(Themenstarter)
Anmeldungsdatum: 11. Dezember 2015
Beiträge: 290
|
seahawk1986 schrieb: Der Link zum Gitlab-Repo funktioniert nicht (eventuell auf privat gesetzt?).
Sorry, ich vergesse manchmal, das bei GitLab die Repoas beim erstellen default Privat sind. Hab es jetzt auf öffentlich gestellt. Ich finde es merkwürdig Variablenzuweisungen als Argumente zu übergeben, das sollte vorher passieren und die Referenz auf die Variable kann dann als Argument genutzt werden.
Wo werden da Variablen übergeben? YAML ist doch keine Programmiersprache.
|
Axel-Erfurt
Anmeldungsdatum: 18. Mai 2016
Beiträge: 1347
|
Das Programm gefällt mir. 👍 Wäre schön wenn man auch neue Dateien erstellen könnte.
Vielleicht füge ich das mal hinzu. Muß es snap sein? Ich habe es mal testweise mit cxfreeze als Ordner erstellt und das funktioniert auch. Ich musste dafür Zeile 33 ändern in | currentDir = QFileInfo.path(QFileInfo(QCoreApplication.arguments()[0]))
|
und Zeile 2 in
| from PyQt5.QtCore import QDir, QLocale, Qt, QFileInfo, QCoreApplication
|
damit es mit python 2 auch läuft. Download Ordner entpacken und im Ordner jdLangTranslator starten.
|
JakobDev
(Themenstarter)
Anmeldungsdatum: 11. Dezember 2015
Beiträge: 290
|
Axel-Erfurt schrieb: Das Programm gefällt mir. 👍
Freut mich 😀 Wäre schön wenn man auch neue Dateien erstellen könnte.
Vielleicht füge ich das mal hinzu.
Das Programm ist eher für das erstellen einer Übersetzung ausgelegt. man lädt eine bereits existierende Sprachdatei z:b. Englisch und kann sie dann übersetzen. Das Erstellen neuer Dateien würde eine größere Umprogrammierung erfordern. Aber wenn du es coden willst kannst du gerne einen PR erstellen und ich schaue dann, ob es gut funktioniert. Muß es snap sein? Ich habe es mal testweise mit cxfreeze als Ordner erstellt und das funktioniert auch.
Der Vorteil an Snap wäre, dass es z.B. im Software Center und auf anderen Seiten auftaucht und es nicht in den Tiefen von GitLab versinkt. Zudem gibt es mit Snap auch automatische Updates.
Ich musste dafür Zeile 33 ändern in | currentDir = QFileInfo.path(QFileInfo(QCoreApplication.arguments()[0]))
|
und Zeile 2 in
| from PyQt5.QtCore import QDir, QLocale, Qt, QFileInfo, QCoreApplication
|
damit es mit python 2 auch läuft. Download Ordner entpacken und im Ordner jdLangTranslator starten.
Das Problem ist, das ich nur für Python 3 entwickle. Eine zwanghafte Kompatibilität meiner Programme zu einer alten Version könnte mich eventuell behindern, auch wenn ich jetzt nicht alle Unterschiede kenne.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
Wilma456 schrieb: Wo werden da Variablen übergeben? YAML ist doch keine Programmiersprache.
Laut der Fehlermeldung beim Aufruf von qmake:
Wilma456 schrieb: Failed to run 'qmake LIBS+="-L/tmp/jdLangTranslator/parts/jdlangtranslator/install/lib" LIBS+="-L/tmp/jdLangTranslator/parts/jdlangtranslator/install/usr/lib" LIBS+="-L/tmp/jdLangTranslator/parts/jdlangtranslator/install/lib/x86_64-linux-gnu" LIBS+="-L/tmp/jdLangTranslator/parts/jdlangtranslator/install/usr/lib/x86_64-linux-gnu" INCLUDEPATH+="/tmp/jdLangTranslator/parts/jdlangtranslator/install/usr/include"' for 'jdlangtranslator': Exited with code 1.
Verify that the part is using the correct parameters and try again.
Mir ist auch noch nicht ganz klar, warum da überhaupt qmake genutzt wird - hast du dafür eine Projektdatei, die nicht im Git ist?
|
JakobDev
(Themenstarter)
Anmeldungsdatum: 11. Dezember 2015
Beiträge: 290
|
Nein. Es befinden sich alle Dateien im Repo. Ich habe nur den ordner "snap" mit der snapcraft.yaml erstellt.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
Dann solltest du soweit ich das verstehe eine setup.py für dein Projekt erstellen und das Python-Plugin für snapcraft nutzen: https://docs.snapcraft.io/python-apps. Ich habe das mal selber versucht, das zumindest auf meinem Testsystem lauffähige Ergebnis kannst du dir hier ansehen: https://github.com/seahawk1986/jdlangtranslator-snap - die Struktur des Projekts musste ich etwas anpassen, damit es sich leichter verpacken und aufrufen lässt.
|
JakobDev
(Themenstarter)
Anmeldungsdatum: 11. Dezember 2015
Beiträge: 290
|
Danke! Die Methode funktioniert und das Programm startet. Es gibt nur ein kleines Problem: Ich habe inzwicshen ein Icon erstellt, das allerdings nicht mit im Snap landet. Hier ist die vom mir jetzt benutze Version
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
Schau dir mal die Dokumentation an, für Icon und .desktop-Datei gibt es entsprechende Felder: https://docs.snapcraft.io/snapcraft-yaml-reference - in https://www.msweet.org/blog/2018-01-23-snaps-and-gui-apps.html gibt es ein Beispiel, wie das aussehen kann.
|
JakobDev
(Themenstarter)
Anmeldungsdatum: 11. Dezember 2015
Beiträge: 290
|
Die Desktop Datei mit Icon funktioniert bereits. Allerdings ist das Icon, dass sich im src Ordner befindet und das im Panel zu sehen sein soll nicht im Snap.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
Das musst du noch in der MANIFEST.in eintragen, damit es dann vom Python-Plugin für snapcraft mit verpackt wird.
|
JakobDev
(Themenstarter)
Anmeldungsdatum: 11. Dezember 2015
Beiträge: 290
|
Danke! Das fertige Ergebnis kann sich hier installieren. btw:
Gibt es eine Möglichkeit die Warnungen beim Programmstart wegzubekommenen?
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
|
Da das ein Python-Tool ist, würde ich das parallel auch als Python-Paket zur Verfügung stellen, welches man dann per pip installieren kann. Snaps sind für unbedarfte Nutzer eine schnelle Lösung, bringen aber auch viele Nachteile.
|
Axel-Erfurt
Anmeldungsdatum: 18. Mai 2016
Beiträge: 1347
|
Gehört vielleicht nicht hier her, aber eines ist mir aufgefallen. Das Aussehen der Dialogfenster ist völlig unterschiedlich. (sie Bild - links snap, rechts python)
- Bilder
|