[PYTHON] Coopération entre py2exe et les outils de configuration

introduction

Lors de la création d'un fichier exe sur Windows à l'aide de py2exe, de nombreux sites sont écrits de manière inattendue en combinaison avec distutils. Cependant, si vous utilisez python sur Linux, etc., vous voudrez certainement l'utiliser en combinaison avec distribuer (setuptools) lors de l'empaquetage. Le paquet setuptools améliore distutils, et lorsque setuptools est inclus, les paramètres donnés à la fonction setup () de distutils sont améliorés, le paquet peut être distribué au format egg et un outil de ligne de commande appelé easy_install peut être utilisé. Ou devenir.

Ce setuptools a cessé de se mettre à jour récemment, mais c'est la distribution qui prend en charge le développement et fournit une API entièrement compatible. Si vous comptez l'utiliser maintenant, vous devez absolument utiliser la distribution. Je voudrais expliquer py2exe immédiatement, mais dans un souci de révision, je vais expliquer de distribuer. (D'ailleurs, chaque concept est séparé, il n'est donc pas nécessaire de l'écrire. Pour ces personnes, cette page est inutile) </ del>

Un commentaire aimable s'est avéré que la distribution est devenue obsolète. Il est préférable de faire le tour et d'utiliser des outils de configuration.

Since the Setuptools 0.7 release, Setuptools and Distribute have merged and Distribute is no longer being maintained.

Installation des outils de configuration

Tout d'abord, je vais vous présenter comment installer les outils de configuration généraux.

$ curl -O https://bitbucket.org/pypa/setuptools/downloads/ez_setup.py
$ sudo python ./dez_setup.py

Téléchargez et exécutez simplement le script de configuration. Très facile. Après avoir installé ce package, vous pourrez utiliser un outil appelé easy_install, qui vous permettra d'installer des packages communs sur site_packages (voir lien à la fin).

À propos, lors de la distribution de la source, il n'est pas possible de supposer que les outils de configuration sont installés. Vous pouvez dire «installer» dans la documentation, mais c'est un peu moche de le faire, même si vous utilisez python, qui peut également résoudre les dépendances. Dans un tel cas, incluez distribuer_setup.py dans la distribution et écrivez comme suit au début de setup.py.

setup.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import ez_setup
ez_setup.use_setuptools()

Si vous mettez la description ci-dessus au début de setup.py, le package de distribution sera installé lorsque le script setup.py sera installé.

Comment écrire setup.py qui combine setuptools + py2exe

Avec l'installation jusqu'à présent, setuptools peut être importé. Ici, je vais vous présenter comment écrire setup.py qui combine setuptools et py2exe. Tout d'abord, le modèle est le suivant.

setup.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

__author__  = "<author name>"
__author_email__ = "<author's email>"
__date__    = "<date>"
__version__ = "<version number>"

import os
from os import listdir
from os.path import join
from os.path import dirname
from os.path import splitext

import ez_setup
ez_setup.use_setuptools()

from setuptools import setup
import py2exe

def find_py_modules(dir):
    py_modules = []
    for f in listdir(dir):
        base, ext = splitext(f)
        if ext == '.py' and base != '<AppName>': py_modules.append(base)
    return py_modules

def read(fname):
    return open(join(dirname(__file__), fname)).read()

setup(name='VideoRecorder',
      version=__version__,
      description='<description>',
      author=__author__,
      author_email=__author_email__,
      url='<project homepage>',
      long_description=read('README'),
      include_package_data=True,
      console=[
        {
            'script': '<main python module>',
            'icon_resources': [(1, '<icon path>'),],
            },
        ],
      package_dir = {'': 'src'},
      py_modules=find_py_modules('src'),
      package_data={'':['*.ini', '*.gif', '*.ico']},
      data_files=[("", [<necessary dlls>]),],
      zipfile=None
      )

Dans le modèle, la pièce entre <> est la pièce à modifier pour chaque créateur. La liste est donnée ci-dessous.

variable Aperçu
author Nom du créateur
author's email L'adresse e-mail de l'auteur
date Date
version number Numéro de version
app name Chemin du module python majeur
description Aperçu
project homepage Page d'accueil du projet
icon path Chemin de l'icône
necessary dlls En fonction du tableau de fichiers requis et du package à utiliser, il peut être nécessaire d'inclure des dll et des polices.

Les variables ci-dessus doivent être ajustées pour le projet. La méthode importée de distribuer est la configuration. Les paramètres de setup.py sont les suivants.

Paramètres Aperçu
version Numéro de version du logiciel
description Présentation du logiciel
author Nom du créateur
author_email Coordonnées du créateur
url URL du projet
license Informations de licence (non décrites dans le modèle)
keywords Informations sur les mots clés (non décrites dans le modèle)
long_description Une description plus détaillée du logiciel
console/windows Déclarez-le en tant que paramètre de console si vous souhaitez afficher un message d'erreur ou en tant que paramètre Windows si vous souhaitez qu'il fonctionne comme une application d'interface utilisateur pure.
options Compressé comme clé de dictionnaire, optimize, bundle_Spécifiez les fichiers. (Non décrit dans le modèle)
include_package_data CVS, Subversion, MANIFEST.valeur booléenne indiquant s'il faut inclure le fichier spécifié dans le fichier in
package_dir Informations de répertoire qui constituent la base du package
package_data Un dictionnaire qui associe une liste de noms de packages à des modèles de noms de fichiers
py_modules Spécification de modules python non empaquetés
data_files Spécification des fichiers à inclure dans la distribution autres que le véritable package python
zipfile Spécifiez s'il faut convertir les modules python en fichier zip

Les significations des autres méthodes sont expliquées ci-dessous. Les variables <> dans ces fonctions et modèles ne sont pas essentielles, vous pouvez donc les modifier en fonction de votre projet.

def find_py_modules(dir):
    py_modules = []
    for f in listdir(dir):
        base, ext = splitext(f)
        if ext == '.py' and base != '<AppName>': py_modules.append(base)
    return py_modules

find_py_modules est une version de module (également une implémentation simple) de find_packages. Dans le cas d'une application qui combine des packages externes, la source principale peut être une unité qui n'a pas besoin d'être packagée. Dans un tel cas, il est préférable de combiner le paramètre py_modules et la méthode find_py_modules (le contenu doit être ajusté individuellement) au lieu du paramètre packages et de la méthode find_packages.

def read(fname):
    return open(join(dirname(__file__), fname)).read()

La méthode read est une méthode pour lire le contenu de long_description à partir d'un fichier. C'est une méthode pratique lors de la création d'une application d'une échelle que la description ne suffit pas à expliquer.

Lien

En ce qui concerne setuptools lui-même, il existe un blog avec des informations précises et complètes, veuillez donc vous y référer.

J'ai également fait référence à ce site lors de la création de ce site. Je pense que c'est le point de départ pour la gestion de setuptools. D'autres liens concernant easy_install et distribuer sont les suivants. Les deux sont des sites anglais, donc si vous voulez une explication plus simple, recherchez sur Google avec les mots clés suivants (+ python).

Recommended Posts

Coopération entre py2exe et les outils de configuration
Coopération entre le module python et l'API
(En bas) Coopération entre Jupyter Notebook et l'exécution d'Excel
Entre paramétrique et non paramétrique
Différence entre processus et travail
Conversion entre unixtime et datetime
Différence entre "categorical_crossentropy" et "sparse_categorical_crossentropy"
Coopération entre PTVS et Anaconda
Différence entre np.array et np.arange
Différence entre MicroPython et CPython
Frontière entre C et Golang
Différence entre ps a et ps -a
Différence entre return et print-Python
Différence entre Ruby et Python Split
Différence entre les répertoires Windows et Linux
MVT-Relation entre le modèle et le module de Django
Différence entre java et python (mémo)
Différence entre list () et [] en Python
Différence entre SQLAlchemy filter () et filter_by ()
Différence entre == et est en python
Mémorandum (différence entre csv.reader et csv.dictreader)
Correspondance entre RecyclerView et Marker (Kotlin)
(Remarque) Différence entre la passerelle et la passerelle par défaut
Différence entre le randint de Numpy et le randint de Random
Différence entre Python, stftime et strptime
Différence entre la série python2 et la série python3 dict.keys ()
Comparaison de vitesse entre CPython et PyPy
[Python] Différence entre fonction et méthode
Différence entre SQLAlchemy flush () et commit ()
Python - Différence entre exec et eval
[Python] Différence entre randrange () et randint ()
[Python] Différence entre trié et trié (Colaboratoire)