Вероятно, лучший способ сделать это - использовать setuptools
package_data
директиву. Это означает использование setuptools
(или distribute
) вместо distutils
, но это очень плавное «обновление».
Вот полный (но не проверенный) пример:
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=[],
)
Обратите внимание на конкретные строки, которые здесь важны:
package_data={'': ['license.txt']},
include_package_data=True,
package_data
является dict
именем пакета (пусто = все пакеты) в списке шаблонов (может включать глобусы). Например, если вы хотите указать только файлы в вашем пакете, вы можете сделать это тоже:
package_data={'yourpackage': ['*.txt', 'path/to/resources/*.txt']}
Решение здесь определенно не в том, чтобы переименовывать ваши не py
файлы с .py
расширением.
Смотрите презентацию Яна Бикинга для получения дополнительной информации.
ОБНОВЛЕНИЕ: другой [лучший] подход
Другой подход, который работает хорошо, если вы просто хотите контролировать содержимое исходного дистрибутива ( sdist
) и иметь файлы вне пакета (например, каталог верхнего уровня), - это добавить MANIFEST.in
файл. См. Документацию Python для формата этого файла.
С тех пор, как я написал этот ответ, я обнаружил, что использование, MANIFEST.in
как правило, менее разочаровывающий подход - просто убедиться, что ваш исходный дистрибутив ( tar.gz
) имеет нужные вам файлы.
Например, если вы хотите включить requirements.txt
из верхнего уровня, рекурсивно включите каталог «данных» верхнего уровня:
include requirements.txt
recursive-include data *
Тем не менее, для того, чтобы эти файлы были скопированы во время установки в папку пакета внутри site-пакетов, вам необходимо предоставить include_package_data=True
эту setup()
функцию. См. Добавление файлов без кода для получения дополнительной информации.