[PYTHON] So erstellen Sie eine * .spec-Datei für pyinstaller.

Sie können eine MacOS-Anwendung mithilfe des mit pyinstaller erstellten Python-Skripts erstellen.

Zuerst habe ich py2app verwendet, aber die Größe der Ergebnisdatei war anders als unten. --Py2app Ergebnis: 35MB --Pyinstaller-Ergebnis: 25 MB Es gibt keinen Grund, Pyinstaller nicht zu verwenden. Die Installation ist jetzt mit PIP möglich. (Ich konnte es letztes Jahr nicht tun)

pip install pyinstaller

Das ist es

Es wird empfohlen, den Pyinstaller durch die * .spec-Datei zu fahren.

Die Grundstruktur der Spezifikationsdatei ist wie folgt.

# -*- mode: python -*-
# filename = Main.spec

a = Analysis(['Main.py'],
             pathex=['/Users/.../ProgramNameDir'],
             hiddenimports=[],
             hookspath=None,
             runtime_hooks=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='Main',
          debug=False,
          strip=None,
          upx=True,
          console=False , icon='mainIcon.ico')
app = BUNDLE(exe,
             name='Main.app',
             icon='mainIcon.ico')

Lesen Sie in diesem Fall main.py und erstellen Sie Main.app. Symbol trägt mainIcon.ico.

Main.py existiert in "/ Users / ... / ProgramNameDir" und verweist auf die lib-Datei von "./lib" darunter. Ändern Sie es daher ein wenig, damit die * .spec-Datei "./lib" erkennt.

# -*- mode: python -*-
# filename = Main.spec

###persönlich./Code zum Erkennen von Bibliotheken###
import sys 
myLibPath = './libs'
sys.path.append(myLibPath)
############################

a = Analysis(['Main.py'],
             pathex=['/Users/.../ProgramNameDir'],
             hiddenimports=[],
             hookspath=None,
             runtime_hooks=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='Main',
          debug=False,
          strip=None,
          upx=True,
          console=False , icon='mainIcon.ico')
app = BUNDLE(exe,
             name='Main.app',
             icon='mainIcon.ico')

Es gibt noch ein anderes Problem. Main.py verwendet die Bilddatei in / Users / ... / ProgramNameDir / img. Dies kann von der endgültigen App nicht gelesen werden, selbst wenn es in sys.path.append hinzugefügt wird. Dies liegt daran, dass der Mechanismus für den Umgang mit Bilddateien unterschiedlich ist.

Wenn die von pyinstaller erstellte App gesteuert wird, werden die erforderlichen Dateien (Bilddateien usw.) in den temporären Ordner (temporärer Ordner) am Speicherort "_MEIPASS" kopiert. Daher muss "_MEIPASS" im * .py-Code erkannt werden.

Fügen Sie diese Funktion in Main.py hinzu.

def resource_path(relative):
  if hasattr(sys, "_MEIPASS"):
      return os.path.join(sys._MEIPASS, relative)
  return os.path.join(relative)

Konvertieren Sie dann das untergeordnete Bildreferenzelement in den Code. Beispiel:

"./img/Title.png " --> resource_path("./img/Title.png ")



 Fügen Sie Tree () zur * .spec-Datei hinzu.

-- mode: python --

#filename = Main.spec import sys myLibPath = './libs' sys.path.append(myLibPath) a = Analysis(['Main.py'], pathex=['/Users/.../ProgramNameDir'], hiddenimports=[], hookspath=None, runtime_hooks=None) pyz = PYZ(a.pure) exe = EXE(pyz, Tree('img',prefix='img'), #<--Ordnername mit dem hinzuzufügenden Bild a.scripts, a.binaries, a.zipfiles, a.datas, name='Main', debug=False, strip=None, upx=True, console=False , icon='mainIcon.ico') app = BUNDLE(exe, name='Main.app', icon='mainIcon.ico')


 Ich benutze ein MacBook Pro. Das heißt, ich verwende Retina Display. Wenn Sie eine App erstellen, die mit Pyinstaller erstellt wurde, werden Meldungsfelder und Dialoge auf dem Retina-Display unscharf angezeigt, was hässlich ist.
 Fügen Sie info_plist zu BUNDLE hinzu, um das Problem zu lösen.


-- mode: python --

#filename = Main.spec import sys myLibPath = './libs' sys.path.append(myLibPath) a = Analysis(['Main.py'], pathex=['/Users/.../ProgramNameDir'], hiddenimports=[], hookspath=None, runtime_hooks=None) pyz = PYZ(a.pure) exe = EXE(pyz, Tree('img',prefix='img'), a.scripts, a.binaries, a.zipfiles, a.datas, name='Main', debug=False, strip=None, upx=True, console=False , icon='mainIcon.ico') app = BUNDLE(exe, name='Main.app',        info_plist={ 'NSHighResolutionCapable': 'True'}, #<-- Option for High Resolution icon='mainIcon.ico')


 Dies ist ungefähr das Ende.

#### **`pyinstaller Main.spec`**
```spec

 Sie können eine App mit erstellen.

 Im Fall von py2exe oder py2app gibt es viele Fälle, aber im Fall von pyinstaller gibt es nicht so viele, deshalb habe ich es für die Organisation aufgezeichnet.


Recommended Posts

So erstellen Sie eine * .spec-Datei für pyinstaller.
So erstellen Sie große Dateien mit hoher Geschwindigkeit
[Go] So erstellen Sie einen benutzerdefinierten Fehler für Sentry
So erstellen Sie ein lokales Repository für Linux
[Python Kivy] So erstellen Sie mit pyinstaller eine exe-Datei
[Für Nicht-Programmierer] Wie man Kaggle läuft
So erstellen Sie ein Conda-Paket
So erstellen Sie eine virtuelle Brücke
So erstellen / löschen Sie symbolische Links
Wie erstelle ich eine Docker-Datei?
So erstellen Sie eine Konfigurationsdatei
So erstellen Sie eine Bezeichnung (Maske) für die Segmentierung mit labelme (semantische Segmentierungsmaske)
So erstellen Sie einen Git-Klonordner
So erstellen Sie eine NVIDIA Docker-Umgebung
[Python] Organisieren der Verwendung für Anweisungen
So installieren Sie das Windows-Subsystem für Linux
So erstellen Sie ein Repository aus Medien
Verwendung von "deque" für Python-Daten
So finden Sie große Dateien unter Linux
Lesen von CSV-Dateien mit Pandas
Verwendung der Fingerabdruckauthentifizierung für KDE
So laden Sie automatisch .gpx-Dateien auf Strava hoch
Erstellen von CSV-Beispieldaten mit Hypothese
So verwenden Sie MkDocs zum ersten Mal
So erstellen Sie ein Spigot-Plug-In (für Java-Anfänger)
[Python] So erstellen Sie auf einfache Weise Ordner für Training, Validierung und Test für mehrere Klassifizierungsprobleme
So erstellen Sie ein Funktionsobjekt aus einer Zeichenfolge
Zusammenfassung zum Importieren von Dateien in Python 3
Verwendung von Template Engine für Network Engineer
So erstellen Sie erklärende Variablen und Zielfunktionen
So erstellen Sie eine JSON-Datei in Python
So erstellen Sie einen OCF-kompatiblen Ressourcenagenten
Was ich durch die Implementierung des Erstellens einer Standardbox für SSD gelernt habe
So installieren Sie Python für Forscher von Pharmaunternehmen
Verwendung von Datenanalysetools für Anfänger
[Zur Aufnahme] Keras-Bildsystem Teil 1: Wie erstelle ich einen eigenen Datensatz?
So überprüfen / extrahieren Sie Dateien im RPM-Paket
So erstellen Sie Daten für CNN (Chainer)
So schreiben Sie einen ShellScript Bash für Anweisung
So erhalten Sie die Dateien im Ordner [Python]
[Hinweis] So erstellen Sie eine Ruby-Entwicklungsumgebung
So erstellen Sie ein 1-zeiliges Kivy-Eingabefeld
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
[ESXi (vCenter)] Hinzufügen einer Netzwerkkarte für CentOS 7.3
So erstellen Sie eine Rest-API in Django
Wie man Python für Anfänger schneller macht [numpy]
[Für Anfänger] Wie man Programmierung studiert Private Memo
So finden Sie die Korrelation für kategoriale Variablen
[Hinweis] So erstellen Sie eine Mac-Entwicklungsumgebung
So erzwingen Sie, dass TensorFlow 2.3.0 für CUDA11 + cuDNN8 erstellt wird
Festlegen der CPU-Affinität für Prozessthreads
Wie man Zufallszahlen mit dem Zufallsmodul von NumPy macht
Lesen Sie die Python-Markdown-Quelle: So erstellen Sie einen Parser
Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen
So suchen Sie nach fehlenden Werten (Kaggle: House Prices)