Wie fügt man einem Rad zusätzliche Dateien hinzu?

Wie steuern Sie, welche Dateien in einem Rad enthalten sind? Es erscheintMANIFEST.in wird nicht von verwendetpython setup.py bdist_wheel.

AKTUALISIEREN:

Ich habe mich geirrt, was den Unterschied zwischen der Installation von einem Quell-Tarball und einem Rad angeht. Die Quelldistribution enthält die in angegebenen DateienMANIFEST.inDas installierte Paket enthält jedoch nur Python-Dateien. Es sind Schritte erforderlich, um zusätzliche Dateien zu identifizieren, die installiert werden sollen, unabhängig davon, ob die Installation über die Quelldistribution, Egg oder Wheel erfolgt. Nämlich,package_data wird für zusätzliche Paketdateien benötigt, undDatendateien für Dateien außerhalb Ihres Pakets wie Befehlszeilenskripte oder Systemkonfigurationsdateien.

Ursprüngliche Frage

ich habeein Projekt wo ich benutzt habepython setup.py sdist um mein Paket zu bauen,MANIFEST.in um die eingeschlossenen und ausgeschlossenen Dateien zu kontrollieren, undPyroma undCheck-Manifest um meine Einstellungen zu bestätigen.

Ich habe es kürzlich in dualen Python 2/3-Code konvertiert und eine setup.cfg mit hinzugefügt

[bdist_wheel]
universal = 1

Ich kann mit ein Rad bauenpython setup.py bdist_wheelund es scheint ein Universalrad zu sein, wie gewünscht. Es sind jedoch nicht alle in angegebenen Dateien enthaltenMANIFEST.in.

Was wird installiert?

Ich habe tiefer gegraben und weiß jetzt mehr über Verpackung und Rad. Folgendes habe ich gelernt:

Ich lade zwei Paketdateien in dasMultigtfs-Projekt auf PyPi:

multigtfs-0.4.2.tar.gz - die Quell-Tar-Kugel, die alle Dateien in enthältMANIFEST.in.multigtfs-0.4.2-py2.py3-none-any.whl - Die fragliche Binärverteilung.

Ich habe zwei neue virtuelle Umgebungen erstellt, beide mit Python 2.7.5, und jedes Paket installiert (pip install multigtfs-0.4.2.tar.gz). Die beiden Umgebungen sind fast identisch. Sie haben verschiedene.pyc Dateien, die die "kompilierten" Python-Dateien sind. Es gibt Protokolldateien, die die verschiedenen Pfade auf der Festplatte aufzeichnen. Die Installation von der Quelle tar ball enthält einen Ordnermultigtfs-0.4.2-py27.egg-info, detailliert die Installation, und die Radinstallation hat amultigtfs-0.4.2.dist-info Ordner mit den Details dieses Prozesses. Aus Sicht des Codes, der das Projekt multigtfs verwendet, besteht jedoch kein Unterschied zwischen den beiden Installationsmethoden.

Die von meinem Test verwendeten ZIP-Dateien wurden auch nicht explizit verwendet, sodass die Testsuite fehlschlägt:

$ django-admin startproject demo
$ cd demo
$ pip install psycopg2  # DB driver for PostGIS project
$ createdb demo         # Create PostgreSQL database
$ psql -d demo -c "CREATE EXTENSION postgis" # Make it a PostGIS database 
$ vi demo/settings.py   # Add multigtfs to INSTALLED_APPS,
                        # Update DATABASE to set ENGINE to django.contrib.gis.db.backends.postgis
                        # Update DATABASE to set NAME to test
$ ./manage.py test multigtfs.tests  # Run the tests
...
IOError: [Errno 2] No such file or directory: u'/Users/john/.virtualenvs/test/lib/python2.7/site-packages/multigtfs/tests/fixtures/test3.zip'
Angeben zusätzlicher Dateien

Unter Verwendung der Vorschläge aus den Antworten habe ich einige zusätzliche Anweisungen hinzugefügtsetup.py:

from __future__ import unicode_literals
# setup.py now requires some funky binary strings
...
setup(
    name='multigtfs',
    packages=find_packages(),
    package_data={b'multigtfs': ['test/fixtures/*.zip']},
    include_package_data=True,
    ...
)

Dadurch werden die ZIP-Dateien (sowie die README-Datei) im Ordner installiert, und die Tests werden jetzt ordnungsgemäß ausgeführt. Danke für die Vorschläge!

Antworten auf die Frage(6)

Ihre Antwort auf die Frage