Мабуть, найкращий спосіб зробити це - використовувати 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 *
Проте, для того , щоб ці файли , які будуть скопійовані під час установки в папку пакета всередині сайту-пакетів, вам необхідно надати include_package_data=True
в setup()
функції. Див. Розділ Додавання файлів без коду для отримання додаткової інформації.