Probablement la meilleure façon de le faire est d'utiliser la setuptools package_data directive. Cela signifie en utilisant setuptools (ou distribuer) au lieu de distutils, mais c'est un très transparente "mise à niveau".
Voici une totalité (mais non testé) exemple:
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=[],
)
Remarque la ligne qui est crucial ici:
package_data={'': ['license.txt']}
C'est un dictionnaire de noms de package (vide = tous les paquets) à une liste de modèles (peut inclure des boules). Par exemple, si vous voulez seulement de spécifier les fichiers à l'intérieur de votre colis, vous pouvez le faire aussi:
package_data={'yourpackage': ['*.txt', 'path/to/resources/*.txt']}
La solution ici est certainement pas de renommer votre non-py fichiers avec un .py extension.
Voir Ian Bicking de présentation pour plus d'info.
Mise à JOUR: un Autre [Mieux] Approche
Une autre approche qui fonctionne bien si vous voulez juste pour contrôler le contenu de la source de distribution (sdist) et avez des fichiers à l'extérieur de l'emballage (p. ex. répertoire de niveau supérieur) est d'ajouter un MANIFESTE.dans le fichier. Voir la documentation Python pour le format de ce fichier.
Depuis la rédaction de cette réponse, j'ai trouvé que l'utilisation de MANIFESTE.est généralement une moins frustrant approche de la juste assurez-vous que votre source de distribution (tar.gz) a les fichiers dont vous avez besoin.
Par exemple, si vous vouliez incldue l'requirements.txt de haut niveau, de manière récursive inclure le niveau supérieur du répertoire "data":
include requirements.txt
recursive-include data *