web-dev-qa-db-de.com

Wie erstelle ich eine Mac OS X App mit Python?

Ich möchte eine GUI-Anwendung erstellen, die unter Windows und Mac funktionieren sollte. Dafür habe ich Python gewählt.

Das Problem tritt unter Mac OS X auf.

Es gibt 2 Tools, um eine ".app" für Mac zu generieren: py2app und pyinstaller.

  1. py2app ist ziemlich gut, fügt jedoch den Quellcode in das Paket ein. Ich möchte den Code nicht mit den Endbenutzern teilen.
  2. Pyinstaller generiert eine ausführbare UNIX-Datei. Wie kann ich es auf einem Mac ausführen? Ich habe ein Bündel mit dieser ausführbaren Datei erstellt, aber das Ergebnis ".app" funktioniert nicht.

Die Fragen sind:

  1. Wie kann man py2app so konfigurieren, dass der Quellcode in die ausführbare -Datei aufgenommen wird, damit die Endbenutzer keinen Zugriff auf mein Programm haben?
  2. Wie konvertiere ich die UNIX-Programmdatei ".app" in Mac?
  3. Gibt es eine Möglichkeit, Python-Code mit GCC zu kompilieren?
  4. In Windows ist es einfach, ich habe eine "exe" -Datei aus Python-Code erstellt und funktioniert. Ist es möglich, eine einzelne Datei "App" für Mac zu erstellen?

P.S. Ich benutze zwei Computer (Windows und Mac), Python 2.7, wxPython, py2exe, py2app und pyinstaller.

Ich habe auch diese Seiten ausgecheckt: 

31

Wie man py2app so konfiguriert, dass der Quellcode in die ausführbare Datei aufgenommen wird, Endbenutzer haben also keinen Zugriff auf mein Programm?

Wenn Sie den Python-Interpreter nicht sehr ernsthaft hacken (und die beschädigte Version einschließen), gibt es keine wirklich gute Möglichkeit, die Quelle vor einem mäßig qualifizierten und entschlossenen Benutzer zu verbergen. Ich glaube fest daran, dass dies auch unter Windows zutrifft. Grundsätzlich kann eine ziemlich saubere Version der Quelle wiederhergestellt werden, unabhängig davon, ob Sie echte Quelle oder Bytecode verwenden. Noch wichtiger ist meiner Meinung nach, es sei denn, Sie geben den tatsächlichen Quellcode an (im Gegensatz zu Bytecode werden Sie eine mögliche Abhängigkeit von der Interpreter-Version einführen). 

Wie konvertiere ich die UNIX-Programmdatei ".app" in Mac?

Was meinen Sie mit einer ausführbaren UNIX-Datei? Eine Darwin-Binärdatei (OS X) [die eigentlich nicht UNIX ist]? Dies kann mit den bereits erwähnten Werkzeugen durchgeführt werden. Es muss jedoch sorgfältig vorgegangen werden, um Bibliotheksabhängigkeiten zu vermeiden.

Wenn Sie möchten, dass ein einfacher Wrapper eine Befehlszeilen-Binärdatei in ein Fenster einfügt, ist dies ziemlich einfach zu bewerkstelligen. Die kostenlose XCode-Suite enthält mehrere Beispiele, die (abhängig von der Ausgabe), die Sie liefern möchten, zur Verfügung stehen ).

Gibt es eine Möglichkeit, Python-Code mit GCC zu kompilieren?

GCC kompiliert Python nicht. Es ist eine andere Sprache (obwohl es in der gcc-Familie Werkzeuge gibt, die mehrere Frontends unterstützen, nicht aber Python). Es gibt Tools, die versuchen, Python in C zu übersetzen, und dann können Sie dies in eine echte Binärdatei kompilieren. Dies funktioniert jedoch nur für Programme, die bestimmte Typen von Konstrukten vermeiden, und der Prozess (und die Einschränkungen) müssen auch Ihre Bibliotheken anwenden.
Ein Projekt, das dies ermöglicht, ist Cython. Es funktioniert gut für einige Arten von Code, meistens numerischer Code, aber es ist nicht einfach zu installieren und zu nutzen, vor allem, wenn Sie etwas produzieren wollen, das auf mehreren verschiedenen Computern läuft.

In Windows ist es einfach, ich habe eine "exe" -Datei aus Python-Code und daraus erstellt funktioniert. Ist es möglich, eine einzelne Datei "App" für Mac zu erstellen?

Ich muss sagen, dass ich darüber skeptisch bin - sehr skeptisch. Genau wie im Fall von OS X hat der Exe den Quellcode fast sicher in sich.

Ein ziemlich einfacher Trick besteht darin, den Quellcode zu verschlüsseln und ihn dann im laufenden Betrieb zu entschlüsseln. Dies scheint mir jedoch mehr Ärger zu sein, als es wert ist.

8
GregD

PyInstaller erstellt unter Mac OSX automatisch Bundles für ausführbare Dateien mit Fenstern. Wenn Sie ypinstaller.py ausführen, müssen Sie die Option "--windowed" übergeben.

Diese Funktion ist auf der Website von pyinstaller dokumentiert

6
Dicky Tsang

Wenn Sie sich nicht vollständig auf wxPython festgelegt haben (und für alle anderen, die ein plattformübergreifendes Python-GUI-Framework suchen), sollten Sie Kivy besuchen. Es ist plattformübergreifend, GPU-beschleunigt und übernimmt die App-Paketierung für Sie. Es ist leicht zu springen, hat eine durchdachte Architektur und bietet Ihnen eine unglaubliche Flexibilität in Bezug auf die Benutzeroberfläche. Dies ist der beste Weg, um eine plattformübergreifende Python-GUI-App zu erstellen.

5
Jonathan Potter

cx_Freeze war die Wahl ... Ich benutze es, packe mein Python-Programm in eine Mac OS X-App. Was wie ein Zauber wirkt.

4
handsomegui

Automator Gibt an, dass eine schnelle und einfache Lösung für ein Skript gefunden wurde. Der Python-Inhalt wird in einer Einzeldatei gespeichert, und der Automator gibt an, dass eine automatische Fehlerbehebung durchgeführt wurde Forniremo istruzioni dettagliate (Verificato per funzionare su Yosemite):

  1. In Automator selezionareFile>Newe seleziona Applicazione come tipo di documento.
  2. Quindi, assicurarsi che la scheda Aktionen sia selezionata a sinistra, quindi nella casella di ricerca digitare run. Tra le altre opzioni vedrai Esegui Shell Script - Klicken Sie hier, um den Editor zu starten.
  3. Wählen Sie im Menü eine Option Shell aus /usr/bin/python .
  4. Incolla il tuo codice Python ist eine modifizierte und selektive PythonformFile>Save.

Per impostazione predefinita, l'app verrà salvata in $HOME/Applications und verrà visualizzata in Spotlight.

Wenn Sie möchten, können Sie sich auf ein Menü, ein Menü, ein Menü, ein Menü oder ein Menü verlassen, und zwar mit einem Platypus - an - Open Source App für die Erstellung von MacOS-Paketen.

2
ccpizza

2: Sie können es nicht "konvertieren", aber Sie können die ausführbare Datei in einer .app-Datei nach App.app/Contents/MacOS/something verschieben, wobei CFBundleExecutable auf "etwas" gesetzt ist. Dies wird generell nicht empfohlen.

1
tkbx

cxFreeze ist die beste verfügbare Lösung. Erstellen Sie zunächst Ihr Programm oder Ihre Anwendung mit Python und erstellen Sie dann die Datei setup für Ihre Anwendung. Anschließend erstellen Sie die App mit dem Build-Befehl python setup.py build Änderungen.

0
Nilanj

Ich habe es nicht mit großen Python-Projekten ausprobiert, aber für meine eigenen Skripte war der einfachste Weg, die ich fand, die Verwendung von Automator

Sie können ein App-Projekt interaktiv mit der Aktion Run Shell Script erstellen, dann das Skript in seinen Editor einfügen, Ihr Shell-Programm auswählen (/ usr/bin/python) und das Projekt schließlich speichern. Und du hast selbst eine Mac-native App.

Automator kann auch mit AppleScript gesteuert werden. So können Sie diesen py-2-app-Konvertierungsprozess auf Ihre Build-Skripte übertragen.

Ich habe noch nie ein GUI-Programm damit getestet, daher weiß ich nicht, ob Sie damit zufrieden sind. Aber ich würde es versuchen, da Sie sich vielleicht fragen, wie gut alle genannten Python-Module/-Anwendungen von Drittanbietern gepflegt werden und wie lange sie dauern werden. Im Lieferumfang von OS X wird Automator wahrscheinlich bleiben, es sei denn, Apple ist es wirklich überdrüssig.

0
kakyo

Nachdem ich py2exe für Windows-Benutzer verwendet hatte, sodass sie sich nicht mit Bibliotheksversionen befassen musste, habe ich die kompilierten Programme auseinandergerissen, sie enthalten die Python-Bytecode-Dateien. Sie können zwar einen Verstoß gegen die Lizenz erzwingen, indem Sie in diese hineinschauen, aber wenn ein Computer sie ausführen kann, kann ich sie lesen. Es ist möglich, Python-Programme mit gcc über einen C-Präprozessor zu kompilieren (suchen Sie nach 2c.py bei Google). Ich weiß nicht, ob einer von ihnen GCC unterstützt. Sie erhalten dadurch zwar keine Sicherheit, aber Sie können eine deutliche Verbesserung der Geschwindigkeit erreichen. 

0
Perkins

Der einzige Weg ist py2app. Du hast keinen anderen Weg. Tut mir Leid .. Die Recherche, die Sie durchgeführt haben, scheint sehr solide zu sein und Sie haben nichts vermisst.

0
transilvlad

Eine motivierte Person könnte möglicherweise verwendbaren Quellcode aus dem Python-Bytecode in Ihrer App rekonstruieren, so dass Sie Ihren Widerspruch gegen py2app noch einmal überdenken können. Wenn Sie Ihren Endbenutzern nicht vertrauen, warum gehen Sie mit ihnen ins Geschäft?

0