ich eine Struktur des Verzeichnisses als solche mit foobar
und alphabet
Datenverzeichnisse zusammen mit dem Code something.py
:Python Verpackung mehrere Unterpakete mit unterschiedlichen Datenverzeichnisse
\mylibrary
\packages
\foobar
foo.zip
bar.zip
\alphabet
abc.zip
xyz.zip
something.py
setup.py
und das Ziel ist, so dass Benutzer die pip können installieren Modul als solche:
pip install mylibrary[alphabet]
und das wird nur enthalten die Daten aus den packages/alphabet/*
Daten und der python-Code. Ein ähnliches Verhalten sollte für pip install mylibrary[foobar]
verfügbar sein.
Wenn der Benutzer installiert, ohne die Spezifikation:
pip install mylibrary
Dann werden sie alle Datenverzeichnisse unter packages/
umfassen.
Zeit, ich habe das Schreiben versucht, die setup.py
mit Python3.5 als solche:
import glob
from setuptools import setup, find_packages
setup(
name = 'mylibrary',
packages = ['packages'],
package_data={'packages':glob.glob('packages' + '/**/*.txt', recursive=True)},
)
, dass eine Verteilung mit allen Datenverzeichnisse erstellen, wenn Benutzer pip install mylibrary
tun.
Wie sollte ich die setup.py
so ändern, dass bestimmte Pip-Installationen wie pip install mylibrary[alphabet]
möglich ist?
Die Sache ist, 'setup.py' wird nie wissen, ob das Paket einfach oder mit Extras installiert wird. Diese Information wird nur von Installationstools (wie 'pip' oder' easy_install') verbraucht und wird niemals an das Setup-Skript übergeben. Die Extras, die Sie im Setup-Skript definieren, sind grob gesagt nur eine zusätzliche Anweisung für das Installationsprogramm: "Wenn Sie zusätzliche Keywords erhalten, sollten Sie das Paket plus ein Paket zusätzlicher Pakete installieren", das ist es. – hoefling