[PYTHON] Comment créer un fichier * .spec pour pyinstaller.

Vous pouvez créer une application MacOS à l'aide du script python créé à l'aide de pyinstaller.

Au début, j'ai utilisé py2app, mais la taille du fichier de résultat était différente comme ci-dessous.

pip install pyinstaller

C'est tout

Il est recommandé de conduire le pyinstaller via le fichier * .spec.

La structure de base du fichier de spécifications est la suivante.

# -*- 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')

Dans ce cas, lisez main.py et créez Main.app. l'icône porte mainIcon.ico.

Main.py existe dans "/ Users / ... / ProgramNameDir" et fait référence au fichier lib de "./lib" en dessous. Donc, modifiez-le un peu pour que le fichier * .spec reconnaisse "./lib".

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

###personnel./Code pour reconnaître les bibliothèques###
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')

Il y a un autre problème. Main.py utilise le fichier image dans / Users / ... / ProgramNameDir / img. Cela ne peut pas être lu par l'application finale même si elle est ajoutée dans sys.path.append. En effet, le mécanisme de gestion des fichiers image est différent.

Lorsque l'application créée par pyinstaller est pilotée, les fichiers nécessaires (fichiers image, etc.) sont copiés dans le dossier temporaire (dossier temporaire) à l'emplacement "_MEIPASS". Par conséquent, il est nécessaire de reconnaître "_MEIPASS" dans le code * .py.

Ajoutez cette fonction dans Main.py.

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

Ensuite, convertissez l'enfant de référence d'image dans le code. exemple:

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



 Ajoutez Tree () au fichier * .spec.

-- 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'), #<--Nom du dossier avec l'image à ajouter 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')


 J'utilise un MacBook pro. Autrement dit, j'utilise Retina Display. Si vous créez une application avec pyinstaller telle quelle, les boîtes de message et les boîtes de dialogue apparaîtront floues sur l'écran Retina, ce qui est moche.
 Ajoutez info_plist à BUNDLE pour le résoudre.


-- 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')


 C'est à peu près la fin.

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

 Vous pouvez créer une application avec.

 Dans le cas de py2exe ou py2app, il y a beaucoup de cas, mais dans le cas de pyinstaller, il n'y en a pas beaucoup, donc je l'ai enregistré pour l'organisation.


Recommended Posts

Comment créer un fichier * .spec pour pyinstaller.
Comment créer des fichiers volumineux à haute vitesse
[Go] Comment créer une erreur personnalisée pour Sentry
Comment créer un référentiel local pour le système d'exploitation Linux
[Python Kivy] Comment créer un fichier exe avec pyinstaller
[Pour les non-programmeurs] Comment marcher Kaggle
Comment créer un package Conda
Comment créer un pont virtuel
Comment créer / supprimer des liens symboliques
Comment créer un Dockerfile (basique)
Comment créer un fichier de configuration
Comment créer une étiquette (masque) pour la segmentation avec labelme (masque de segmentation sémantique)
Comment créer un dossier git clone
Comment créer un environnement NVIDIA Docker
[Python] Organisation de l'utilisation des instructions
Comment installer le sous-système Windows pour Linux
Comment créer un référentiel à partir d'un média
Comment utiliser "deque" pour les données Python
Comment trouver des fichiers volumineux sous Linux
Comment lire des fichiers CSV avec Pandas
Comment utiliser l'authentification par empreinte digitale pour KDE
Comment télécharger automatiquement des fichiers .gpx sur Strava
Comment créer des exemples de données CSV avec hypothèse
Comment utiliser MkDocs pour la première fois
Comment créer un plug-in Spigot (pour les débutants Java)
[Python] Comment créer facilement des dossiers de formation, de validation et de test pour plusieurs problèmes de classification
Comment créer un objet fonction à partir d'une chaîne
Résumé de la façon d'importer des fichiers dans Python 3
Comment utiliser Template Engine pour Network Engineer
Comment créer des variables explicatives et des fonctions objectives
Comment créer un fichier JSON en Python
Comment créer un agent de ressources compatible OCF
Ce que j'ai appris en mettant en œuvre comment créer une boîte par défaut pour SSD
Comment installer Python pour les chercheurs de sociétés pharmaceutiques
Comment utiliser les outils d'analyse de données pour les débutants
[Pour l'enregistrement] Système d'image Keras Partie 1: Comment créer votre propre ensemble de données?
Comment vérifier / extraire des fichiers dans un package RPM
Comment créer des données à mettre dans CNN (Chainer)
Comment écrire une instruction ShellScript Bash for
Comment obtenir les fichiers dans le dossier [Python]
[Note] Comment créer un environnement de développement Ruby
Comment créer une boîte de saisie Kivy 1 ligne
Procédure de création d'application multi-plateforme avec kivy
[ESXi (vCenter)] Comment ajouter une carte réseau pour CentOS 7.3
Comment créer une API Rest dans Django
Comment rendre le Python des débutants plus rapide [numpy]
[Pour les débutants] Comment étudier la programmation Mémo privé
Comment trouver la corrélation pour les variables catégorielles
[Note] Comment créer un environnement de développement Mac
Comment forcer TensorFlow 2.3.0 à construire pour CUDA11 + cuDNN8
Comment définir l'affinité du processeur pour les threads de processus
Comment créer des nombres aléatoires avec le module aléatoire de NumPy
Lire la source Python-Markdown: Comment créer un analyseur
Créer un ensemble de données d'images à utiliser pour la formation
Comment vérifier les valeurs manquantes (Kaggle: House Prices)