Prawdopodobnie najlepszym sposobem na to jest skorzystanie z setuptools
package_data
dyrektywy. Oznacza to użycie setuptools
(lub distribute
) zamiast distutils
, ale jest to bardzo płynna „aktualizacja”.
Oto pełny (ale nieprzetestowany) przykład:
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=[],
)
Zwróć uwagę na konkretne wiersze, które są tutaj krytyczne:
package_data={'': ['license.txt']},
include_package_data=True,
package_data
jest dict
nazwą pakietu (pusta = wszystkie pakiety) do listy wzorców (może zawierać globusy). Na przykład, jeśli chcesz określić tylko pliki w pakiecie, możesz to zrobić również:
package_data={'yourpackage': ['*.txt', 'path/to/resources/*.txt']}
Rozwiązaniem tutaj jest zdecydowanie nie zmiana nazwy py
plików innych niż pliki z .py
rozszerzeniem.
Zobacz prezentację Iana Bickinga, aby uzyskać więcej informacji.
AKTUALIZACJA: Kolejne podejście [lepsze]
Innym podejściem, które działa dobrze, jeśli chcesz kontrolować zawartość źródłowej dystrybucji ( sdist
) i mieć pliki poza pakietem (np. Katalog najwyższego poziomu), jest dodanie MANIFEST.in
pliku. Zobacz dokumentacji Pythona do formatu tego pliku.
Od czasu napisania tej odpowiedzi stwierdziłem, że używanie MANIFEST.in
jest zazwyczaj mniej frustrujące, aby upewnić się, że dystrybucja źródłowa ( tar.gz
) zawiera potrzebne pliki.
Na przykład, jeśli chcesz dołączyć requirements.txt
z najwyższego poziomu, rekurencyjnie dołącz katalog „danych” najwyższego poziomu:
include requirements.txt
recursive-include data *
Niemniej jednak, aby te pliki mogły zostać skopiowane podczas instalacji do folderu pakietu w pakietach witryn, musisz dostarczyć include_package_data=True
tę setup()
funkcję. Aby uzyskać więcej informacji, zobacz Dodawanie plików innych niż kodowe .