Der wahrscheinlich beste Weg, dies zu tun, ist die Verwendung der setuptools package_dataRichtlinie. Dies bedeutet zwar die Verwendung von setuptools(oder distribute) anstelle von distutils, aber dies ist ein sehr nahtloses "Upgrade".
Hier ist ein vollständiges (aber nicht getestetes) Beispiel:
from setuptools import setup, find_packages
setup(
name='your_project_name',
version='0.1',
description='A description.',
packages=find_packages(exclude=['ez_setup', 'tests', 'tests.*']),
package_data={'': ['license.txt']},
include_package_data=True,
install_requires=[],
)
Beachten Sie die spezifischen Zeilen, die hier kritisch sind:
package_data={'': ['license.txt']},
include_package_data=True,
package_dataist ein dictPaketname (leer = alle Pakete) zu einer Liste von Mustern (kann Globs enthalten). Wenn Sie beispielsweise nur Dateien in Ihrem Paket angeben möchten, können Sie dies auch tun:
package_data={'yourpackage': ['*.txt', 'path/to/resources/*.txt']}
Die Lösung hier ist definitiv nicht , Ihre Nicht- pyDateien mit einer .pyErweiterung umzubenennen .
Siehe Ian Bicking Präsentation für weitere Informationen.
UPDATE: Ein weiterer [besserer] Ansatz
Ein anderer Ansatz, der gut funktioniert, wenn Sie nur den Inhalt der Quelldistribution ( sdist) steuern und Dateien außerhalb des Pakets haben möchten (z. B. Verzeichnis der obersten Ebene), ist das Hinzufügen einer MANIFEST.inDatei. Informationen zum Format dieser Datei finden Sie in der Python-Dokumentation .
Seit ich diese Antwort geschrieben habe, habe ich festgestellt, dass die Verwendung MANIFEST.inin der Regel weniger frustrierend ist, um sicherzustellen, dass Ihre Quelldistribution ( tar.gz) die benötigten Dateien enthält.
Wenn Sie beispielsweise das requirements.txtVerzeichnis der obersten Ebene einschließen möchten, schließen Sie das Datenverzeichnis der obersten Ebene rekursiv ein:
include requirements.txt
recursive-include data *
Damit diese Dateien bei der Installation in den Ordner des Pakets in Site-Paketen kopiert werden können, müssen Sie include_package_data=Truedie setup()Funktion bereitstellen . Weitere Informationen finden Sie unter Hinzufügen von Nicht-Code-Dateien .