La meilleure façon de procéder est probablement d'utiliser la setuptools
package_data
directive. Cela signifie utiliser setuptools
(ou distribute
) au lieu de distutils
, mais il s'agit d'une "mise à niveau" très transparente.
Voici un exemple complet (mais non testé):
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=[],
)
Notez les lignes spécifiques qui sont essentielles ici:
package_data={'': ['license.txt']},
include_package_data=True,
package_data
est un nom dict
de package (vide = tous les packages) à une liste de modèles (peut inclure des globes). Par exemple, si vous souhaitez uniquement spécifier des fichiers dans votre package, vous pouvez également le faire:
package_data={'yourpackage': ['*.txt', 'path/to/resources/*.txt']}
La solution ici est définitivement de ne pas renommer vos non- py
fichiers avec une .py
extension.
Voir la présentation de Ian Bicking pour plus d'informations.
MISE À JOUR: Une autre [meilleure] approche
Une autre approche qui fonctionne bien si vous souhaitez simplement contrôler le contenu de la distribution source ( sdist
) et avoir des fichiers en dehors du package (par exemple, le répertoire de niveau supérieur) consiste à ajouter un MANIFEST.in
fichier. Voir la documentation Python pour le format de ce fichier.
Depuis la rédaction de cette réponse, j'ai constaté que l'utilisation MANIFEST.in
est généralement une approche moins frustrante pour s'assurer que votre distribution source ( tar.gz
) possède les fichiers dont vous avez besoin.
Par exemple, si vous souhaitez inclure le à requirements.txt
partir du niveau supérieur, incluez récursivement le répertoire "données" de niveau supérieur:
include requirements.txt
recursive-include data *
Néanmoins, pour que ces fichiers soient copiés au moment de l'installation dans le dossier du package à l'intérieur de site-packages, vous devrez fournir include_package_data=True
la setup()
fonction. Voir Ajout de fichiers non codés pour plus d'informations.