Créez un fichier msi évolutif avec cx_Freeze

Le code de mise à niveau MSI est un code unique pour gérer votre application. Si cela n'est pas spécifié, vous devrez réinstaller manuellement le package à chaque mise à niveau.

Générer l'UUID (GUID) pour le code de mise à niveau

Exécutez la commande suivante dans l'interpréteur Python. import uuid str(uuid.uuid3(uuid.NAMESPACE_DNS, 'appname.orgname.org')).upper()

Cela générera un ID unique tel que «3F2504E0-4F89-11D3-9A0C-0305E82C3301», alors notez-le.

Préparez setup.py

setup.py


#Informations sur l'application
name = 'memopad'
version = '1.0.0'
author = 'example'
author_email = '[email protected]'
url = 'http://example.xxx'
description = 'Text Editor'

#Spécifiez le GUID ici (en gros, il ne doit pas être changé)
upgrade_code = '{3F2504E0-4F89-11D3-9A0C-0305E82C3301}'
#Pour Windows 64 bits, changez le dossier d'installation
# ProgramFiles(64)Le dossier semble être remplacé par le répertoire réel du côté msi
programfiles_dir = 'ProgramFiles64Folder' if distutils.util.get_platform() == 'win-amd64' else 'ProgramFilesFolder'

#Options à utiliser avec la commande build sous Windows
build_exe_options = {
    'packages': ['os'],
    'excludes': ['tkinter'], #Exclure tkinter car il n'est pas utilisé
    'includes': ['PySide.QtCore', 'PySide.QtGui', 'gui', 'commands'],
    'include_files': ['img/', 'lang/', 'license/'],
    'include_msvcr': True, #Puisqu'il utilise PySide, il ne peut être démarré que si le runtime C de Microsoft est inclus.
    'compressed'   : True
}

# bdist_Options à utiliser avec la commande msi
bdist_msi_options = {
    'upgrade_code': upgrade_code,
    'add_to_path': False,
    'initial_target_dir': '[%s]\%s\%s' % (programfiles_dir, author, name)
}

options = {
    'build_exe': build_exe_options,
    'bdist_msi': bdist_msi_options
}

#informations exe
base = 'Win32GUI' if sys.platform == 'win32' else None
icon = 'img/app_icon.ico'

mainexe = Executable(
    'main.py',
    targetName = 'Memopad.exe',
    base = base,
    icon = icon,
    copyDependentFiles = True
)

setup(
    name=name,
    version=version,
    author=author,
    author_email=author_email,
    url=url,
    description=description,
    options=options,
    executables=[mainexe]
)

Correction de windist.py dans cx_Freeze

Si vous le construisez tel quel, il ne passera pas le contrôle de validation d'Orca (l'éditeur MSI de Microsoft), donc modifiez'cx_Freeze / windist.py'in site-packages. Ajoutez le taple suivant à la liste des accessoires à la ligne 230.

windist.py


('SecureCustomProperties', 'REMOVEOLDVERSION;REMOVENEWVERSION')

Construire

python setup.py bdist_msi Courez. exe et msi sont créés. Veuillez noter que si vous modifiez le code de mise à niveau, il ne sera pas considéré comme le même package et vous ne pourrez pas gérer correctement les packages. Sachez également que vous pouvez être averti lors de l'installation sans signature numérique.

Confirmation de MSI

Ouvrez le MSI généré par Orca et consultez la table des propriétés. Si le GUID spécifié précédemment est affiché dans la propriété UpgradeCode, il ne doit y avoir aucun problème.

référence

distutils setup script — cx_Freeze 5.0 documentation Cours développeur-programme d'installation Windows

Recommended Posts

Créez un fichier msi évolutif avec cx_Freeze
Créez rapidement un fichier Excel avec Python #python
Créer un environnement avec virtualenv
Créer une API avec Django
[Python] Créez un fichier de distribution pour le programme Tkinter avec cx_Freeze
Faire une application utilisant tkinter un fichier exécutable avec cx_freeze
[Python Kivy] Comment créer un fichier exe avec pyinstaller
Créez une tranche d'âge avec les pandas
Créer un téléchargeur de fichiers avec Django
Créer une application en classifiant avec Pygame
Créer une visionneuse de traitement d'image avec PySimpleGUI
Créer une machine virtuelle avec un fichier YAML (KVM)
Créer un fichier Excel avec Python + matrice de similarité
[Python] Créez rapidement une API avec Flask
Générer une instance Excel compatible avec les compléments avec xlwings
Créez une application de mots anglais avec python
Créez une application qui devine les étudiants avec Python
Créer un programme académique avec optimisation des combinaisons
Créer un fichier exécutable GUI créé avec tkinter
Créer un fichier qui peut être exécuté dans le langage de script
Créer une image avec des caractères avec python (japonais)
Créer un fichier au format Photoshop (.psd) avec python
Créer un cylindre avec une sortie de fichier open3d + STL
Créez rapidement un serveur API avec Python + Falcon
Créez un fichier exe qui fonctionne dans un environnement Windows sans Python avec PyInstaller
Créer un serveur local GIF animé avec Python + Flask
Créez un fichier image à l'aide de PIL (Python Imaging Library).
Créez un tweet idole avec Keras LSTM (génération de phrases)
Un moyen simple de créer un module d'importation avec jupyter
Créez une application qui devine les étudiants avec la version python-GUI
Créer un nombre aléatoire avec une densité de probabilité arbitraire
Créez un environnement Open AI Gym avec Bash sur Windows 10
Tapez après avoir lu un fichier Excel avec pandas read_excel
Créer un fichier CAO 2D ".dxf" avec python [ezdxf]
[WIP] Créer un chaînage à 1 fichier
Opération de fichier avec open - "../"
Créez des jeux avec Pygame
Créer un filtre avec scipy
[Python] Créez un écran de spécification de chemin de fichier et de dossier avec tkinter
Jusqu'à ce que vous modifiiez le fichier SVG avec AutoCAD en PNG.
Créez des jeux LCD (16x2) avec Raspberry Pi et Python
Makefile minimal et buildout.cfg pour créer un environnement avec buildout
Créez un exemple de scène semblable à un jeu avec juste le script Blender 2.80
Créons une application qui authentifie OIDC avec Azure AD
Créer une fonction d'authentification à l'aide de django-allauth et CustomUser dans Django
Comment lire un fichier Excel (.xlsx) avec Pandas [Python]
Comment créer un fichier ISO (image CD) sous Linux
J'ai essayé de créer un article dans Wiki.js avec SQL Alchemy