Probabilmente il modo migliore per farlo è usare la setuptools
package_data
direttiva. Questo significa usare setuptools
(o distribute
) invece di distutils
, ma questo è un "upgrade" molto semplice.
Ecco un esempio completo (ma non testato):
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=[],
)
Nota le linee specifiche che sono fondamentali qui:
package_data={'': ['license.txt']},
include_package_data=True,
package_data
è un nome dict
di pacchetto (vuoto = tutti i pacchetti) in un elenco di modelli (può includere globs). Ad esempio, se si desidera specificare solo i file all'interno del pacchetto, è possibile farlo anche:
package_data={'yourpackage': ['*.txt', 'path/to/resources/*.txt']}
La soluzione qui è sicuramente non per rinominare i non- py
file con .py
estensione.
Vedi la presentazione di Ian Bicking per maggiori informazioni.
AGGIORNAMENTO: un altro approccio [migliore]
Un altro approccio che funziona bene se si desidera solo controllare il contenuto della distribuzione di origine ( sdist
) e disporre di file all'esterno del pacchetto (ad esempio directory di livello superiore) è quello di aggiungere un MANIFEST.in
file. Consulta la documentazione di Python per il formato di questo file.
Da quando ho scritto questa risposta, ho scoperto che l'utilizzo MANIFEST.in
è in genere un approccio meno frustrante per assicurarsi che la distribuzione di origine ( tar.gz
) abbia i file necessari.
Ad esempio, se si desidera includere il requirements.txt
livello principale, includere ricorsivamente la directory "dati" di livello superiore:
include requirements.txt
recursive-include data *
Tuttavia, per poter copiare questi file al momento dell'installazione nella cartella del pacchetto all'interno dei pacchetti del sito, sarà necessario fornire include_package_data=True
alla setup()
funzione. Vedere Aggiunta di file non di codice per ulteriori informazioni.