Wie steuern Sie, welche Dateien in einem Rad enthalten sind? Es scheint MANIFEST.in
nicht von verwendet zu werden python setup.py bdist_wheel
.
UPDATE :
Ich habe mich geirrt, was den Unterschied zwischen der Installation von einem Quell-Tarball und einem Rad betrifft. Die Quelldistribution enthält die in angegebenen Dateien MANIFEST.in
, das 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, das Ei oder das Rad erfolgt. Paketdaten werden nämlich für zusätzliche Paketdateien und Datendateien für Dateien außerhalb Ihres Pakets wie Befehlszeilenskripte oder Systemkonfigurationsdateien benötigt.
Ursprüngliche Frage
Ich habe ein Projekt, in dem ich python setup.py sdist
mein Paket erstellt, MANIFEST.in
die eingeschlossenen und ausgeschlossenen Dateien gesteuert und Pyrom und Check-Manifest verwendet habe , 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 ein Rad mit bauen python setup.py bdist_wheel
, und es scheint wie gewünscht ein Universalrad zu sein. Es enthält jedoch nicht alle in angegebenen Dateien MANIFEST.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 das multigtfs-Projekt auf PyPi hoch :
multigtfs-0.4.2.tar.gz
- die Quell-Teerball, die alle Dateien 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 nahezu identisch. Sie haben verschiedene .pyc
Dateien, die "kompilierten" Python-Dateien. Es gibt Protokolldateien, die die verschiedenen Pfade auf der Festplatte aufzeichnen. Die Installation von der Quell-Teerball enthält einen Ordner multigtfs-0.4.2-py27.egg-info
, in dem die Installation detailliert beschrieben ist, und die Radinstallation enthält einen multigtfs-0.4.2.dist-info
Ordner mit den Details dieses Vorgangs. Unter dem Gesichtspunkt des Codes, der das multigtfs-Projekt verwendet, gibt es jedoch keinen Unterschied zwischen den beiden Installationsmethoden.
Die von meinem Test verwendeten ZIP-Dateien wurden explizit nicht 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'
Zusätzliche Dateien angeben
Unter Verwendung der Vorschläge aus den Antworten fügte ich einige zusätzliche Anweisungen hinzu setup.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!