[PYTHON] Zusammenarbeit zwischen py2exe und Setup-Tools

Einführung

Beim Erstellen einer exe-Datei unter Windows mit py2exe gibt es viele Websites, die unerwartet in Kombination mit distutils geschrieben werden. Wenn Sie jedoch Python unter Linux usw. verwenden, sollten Sie es beim Packen auf jeden Fall in Kombination mit Distribute (Setuptools) verwenden. Das setuptools-Paket erweitert distutils, und wenn setuptools enthalten ist, werden die Parameter für die setup () -Funktion von distutils erweitert, das Paket kann im Eiformat verteilt werden und ein Befehlszeilentool namens easy_install kann verwendet werden. Oder werden.

Diese Setuptools wurden kürzlich nicht mehr aktualisiert, aber es handelt sich um eine Distribution, die die Entwicklung übernimmt und eine vollständig kompatible API bereitstellt. Wenn Sie es von nun an verwenden, sollten Sie auf jeden Fall Distribute verwenden. Ich möchte py2exe sofort erklären, aber zur Überprüfung werde ich es von Distribute erklären. (Übrigens ist jedes Konzept separat, so dass es möglicherweise nicht erforderlich ist, es zu schreiben. Für solche Personen ist diese Seite nutzlos.) </ Del>

Ein freundlicher Kommentar stellte sich heraus, dass die Verteilung veraltet war. Es ist besser, Setup-Tools zu verwenden.

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

Installation von Setup-Tools

Zunächst werde ich die Installation allgemeiner Setup-Tools vorstellen.

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

Laden Sie einfach das Setup-Skript herunter und führen Sie es aus. Sehr leicht. Nach der Installation dieses Pakets können Sie ein Tool namens easy_install verwenden, mit dem Sie allgemeine Pakete auf site_packages installieren können (siehe Link am Ende).

Bei der Verteilung der Quelle kann übrigens nicht davon ausgegangen werden, dass Setup-Tools installiert sind. Sie können in der Dokumentation "Installieren" sagen, aber es ist etwas hässlich, dies zu tun, obwohl Sie Python verwenden, das auch Abhängigkeiten auflösen kann. Nehmen Sie in einem solchen Fall Distribute_setup.py in die Distribution auf und schreiben Sie zu Beginn von setup.py wie folgt.

setup.py


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

import ez_setup
ez_setup.use_setuptools()

Wenn Sie die obige Beschreibung am Anfang von setup.py einfügen, wird das Verteilungspaket installiert, wenn das Skript setup.py installiert wird.

Wie schreibe ich setup.py, das setuptools + py2exe kombiniert

Mit der bisherigen Installation können Setuptools importiert werden. Hier werde ich vorstellen, wie setup.py geschrieben wird, das setuptools und py2exe kombiniert. Zunächst ist die Vorlage wie folgt.

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
      )

In der Vorlage ist das in <> eingeschlossene Teil das Teil, das für jeden Ersteller geändert werden muss. Die Liste ist unten angegeben.

Variable Überblick
author Name des Erstellers
author's email Die E-Mail-Adresse des Autors
date Datum
version number Versionsnummer
app name Pfad des Hauptpythonmoduls
description Überblick
project homepage Projekthomepage
icon path Symbolpfad
necessary dlls Abhängig vom erforderlichen Dateiarray und dem zu verwendenden Paket kann es erforderlich sein, DLLs und Schriftarten einzuschließen.

Die oben genannten Variablen müssen für das Projekt angepasst werden. Die aus Distribute importierte Methode ist Setup. Die Parameter von setup.py sind wie folgt.

Parameter Überblick
version Software-Versionsnummer
description Softwareübersicht
author Name des Erstellers
author_email Kontaktinformationen des Erstellers
url Projekt-URL
license Lizenzinformationen (nicht in der Vorlage beschrieben)
keywords Schlüsselwortinformationen (in der Vorlage nicht beschrieben)
long_description Eine detailliertere Beschreibung der Software
console/windows Deklarieren Sie es als Konsolenparameter, wenn Sie eine Fehlermeldung ausgeben möchten, oder als Windows-Parameter, wenn Sie möchten, dass es als reine UI-App funktioniert.
options Als Wörterbuchschlüssel komprimiert, optimize, bundle_Geben Sie Dateien an. (Nicht in der Vorlage beschrieben)
include_package_data CVS, Subversion, MANIFEST.Bool-Wert, der angibt, ob die angegebene Datei in die In-Datei aufgenommen werden soll
package_dir Verzeichnisinformationen, die die Grundlage des Pakets bilden
package_data Ein Wörterbuch, das eine Liste von Paketnamen mit Dateinamenmustern verknüpft
py_modules Angeben von nicht gepackten Python-Modulen
data_files Angeben von Dateien, die in die Distribution aufgenommen werden sollen, außer dem echten Python-Paket
zipfile Geben Sie an, ob Python-Module in eine Zip-Datei konvertiert werden sollen

Die Bedeutungen anderer Methoden werden unten erläutert. Die <> Variablen in diesen Funktionen und Vorlagen sind nicht unbedingt erforderlich, sodass Sie sie entsprechend Ihrem Projekt ändern können.

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 ist eine Modulversion (auch eine einfache Implementierung) von find_packages. Im Fall einer Anwendung, die externe Pakete kombiniert, kann die Kernquelle eine Einheit sein, die nicht gepackt werden muss. In einem solchen Fall ist es besser, den Parameter py_modules und die Methode find_py_modules (der Inhalt sollte individuell angepasst werden) anstelle des Parameters packages und der Methode find_packages zu kombinieren.

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

Die Lesemethode ist eine Methode zum Lesen des Inhalts von long_description aus einer Datei. Dies ist eine bequeme Methode, wenn Sie eine Anwendung mit einer Skala erstellen, deren Beschreibung nicht ausreicht, um sie zu erklären.

Verknüpfung

Für setuptools selbst gibt es einen Blog mit genauen und umfassenden Informationen. Bitte lesen Sie diesen.

Ich habe beim Erstellen dieser Website auch auf diese Site verwiesen. Ich denke, dies ist der Ausgangspunkt für den Umgang mit Setuptools. Weitere Links zu easy_install und Distribute lauten wie folgt. Bei beiden handelt es sich um englische Websites. Wenn Sie also eine einfachere Erklärung wünschen, suchen Sie bei Google mit den folgenden Schlüsselwörtern (+ Python).

Recommended Posts

Zusammenarbeit zwischen py2exe und Setup-Tools
Zusammenarbeit zwischen Python-Modul und API
(Unten) Zusammenarbeit zwischen Jupyter Notebook und Excel
Zwischen parametrisch und nicht parametrisch
Unterschied zwischen Prozess und Job
Konvertierung zwischen Unixtime und Datetime
Unterschied zwischen "categoryical_crossentropy" und "sparse_categorical_crossentropy"
Zusammenarbeit zwischen PTVS und Anaconda
Unterschied zwischen np.array und np.arange
Unterschied zwischen MicroPython und CPython
Grenze zwischen C und Golang
Unterschied zwischen ps a und ps -a
Unterschied zwischen Return und Print-Python
Unterschied zwischen Ruby und Python Split
Unterschied zwischen Windows- und Linux-Verzeichnissen
Djangos MVT-Beziehung zwischen Modell und Modul
Unterschied zwischen Java und Python (Memo)
Unterschied zwischen list () und [] in Python
Unterschied zwischen SQLAlchemy filter () und filter_by ()
Unterschied zwischen == und ist in Python
Memorandum (Unterschied zwischen csv.reader und csv.dictreader)
Korrespondenz zwischen RecyclerView und Marker (Kotlin)
(Hinweis) Unterschied zwischen Gateway und Standard-Gateway
Unterschied zwischen Numpys Randint und Randoms Randint
Unterschied zwischen Python, Stftime und Strptime
Unterschied zwischen der Python2-Serie und der Python3-Serie dict.keys ()
Geschwindigkeitsvergleich zwischen CPython und PyPy
[Python] Unterschied zwischen Funktion und Methode
Unterschied zwischen SQLAlchemy flush () und commit ()
Python - Unterschied zwischen exec und eval
[Python] Unterschied zwischen randrange () und randint ()
[Python] Unterschied zwischen sortiert und sortiert (Colaboratory)