ubuntuusers.de

PyQt5 Programm als Snap packen

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

JakobDev

Avatar von JakobDev

Anmeldungsdatum:
11. Dezember 2015

Beiträge: 290

Wohnort: Saarland

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: 11250

Wohnort: München

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)
Avatar von JakobDev

Anmeldungsdatum:
11. Dezember 2015

Beiträge: 290

Wohnort: Saarland

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

1
        currentDir = QFileInfo.path(QFileInfo(QCoreApplication.arguments()[0]))

und Zeile 2 in

1
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)
Avatar von JakobDev

Anmeldungsdatum:
11. Dezember 2015

Beiträge: 290

Wohnort: Saarland

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

1
        currentDir = QFileInfo.path(QFileInfo(QCoreApplication.arguments()[0]))

und Zeile 2 in

1
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: 11250

Wohnort: München

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)
Avatar von JakobDev

Anmeldungsdatum:
11. Dezember 2015

Beiträge: 290

Wohnort: Saarland

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: 11250

Wohnort: München

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)
Avatar von JakobDev

Anmeldungsdatum:
11. Dezember 2015

Beiträge: 290

Wohnort: Saarland

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: 11250

Wohnort: München

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)
Avatar von JakobDev

Anmeldungsdatum:
11. Dezember 2015

Beiträge: 290

Wohnort: Saarland

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: 11250

Wohnort: München

Das musst du noch in der MANIFEST.in eintragen, damit es dann vom Python-Plugin für snapcraft mit verpackt wird.

JakobDev

(Themenstarter)
Avatar von JakobDev

Anmeldungsdatum:
11. Dezember 2015

Beiträge: 290

Wohnort: Saarland

Danke! Das fertige Ergebnis kann sich hier installieren.

btw: Gibt es eine Möglichkeit die Warnungen beim Programmstart wegzubekommenen?

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

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
Antworten |