Der wahrscheinlich beste Weg, dies zu tun, ist die Verwendung der setuptools
package_data
Richtlinie. 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_data
ist ein dict
Paketname (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- py
Dateien mit einer .py
Erweiterung 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.in
Datei. Informationen zum Format dieser Datei finden Sie in der Python-Dokumentation .
Seit ich diese Antwort geschrieben habe, habe ich festgestellt, dass die Verwendung MANIFEST.in
in der Regel weniger frustrierend ist, um sicherzustellen, dass Ihre Quelldistribution ( tar.gz
) die benötigten Dateien enthält.
Wenn Sie beispielsweise das requirements.txt
Verzeichnis 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=True
die setup()
Funktion bereitstellen . Weitere Informationen finden Sie unter Hinzufügen von Nicht-Code-Dateien .