Подтвердить что ты не робот

Python setuptools: как включить файл конфигурации для распространения в <префикs>/etc

Как написать setup.py так, чтобы:

  • Распределение двоичных яиц (bdist_egg) включает пример файла конфигурации и
  • После установки помещает его в каталог {prefix}/etc?

Пример исходной директории проекта выглядит следующим образом:

bin/
   myapp
etc/
   myapp.cfg
myapp/
    __init__.py
    [...]
setup.py

Файл setup.py выглядит так:

from distutils.command.install_data import install_data

packages = ['myapp', ]
scripts = ['bin/myapp',]
cmdclasses = {'install_data': install_data}
data_files = [('etc', ['etc/myapp.cfg'])]

setup_args = {
    'name': 'MyApp',
    'version': '0.1',
    'packages': packages,
    'cmdclass': cmdclasses,
    'data_files': data_files,
    'scripts': scripts,
#    'include_package_data': True,
    'test_suite': 'nose.collector'
}

try:
    from setuptools import setup
except ImportError:
    from distutils.core import setup

setup(**setup_args)

setuptools устанавливаются как в среде сборки, так и в среде установки.

Записанный 'include_package_data' или не помогает.

4b9b3361

Ответ 1

Я занимался некоторыми исследованиями по этой проблеме, и я думаю, что ответ находится в документации setuptools: http://peak.telecommunity.com/DevCenter/setuptools#non-package-data-files

Затем я цитирую выдержку, которая, как мне кажется, имеет ответ:

Файлы данных без пакетов

Дистанты обычно устанавливают общие "файлы данных" на местоположение на платформе (например,/usr/share). Эта функция предназначена для использовать для таких вещей, как документация, примеры конфигурационных файлов, и тому подобное. setuptools не устанавливает эти файлы данных в отдельное место, однако. Они связаны внутри файла яйца или вместе с модулями и пакетами Python. Файлы данных также можно получить с помощью API управления ресурсами [...]

Обратите внимание, что это инкапсуляция файлов данных означает, что вы не может фактически установить файлы данных в какое-либо произвольное место на пользовательская машина; это особенность, а не ошибка. Вы всегда можете включить script в вашем дистрибутиве, который извлекает и копирует документации или файлов данных в указанное пользователем местоположение, на их свое усмотрение. Если вы поместите связанные файлы данных в один каталог, вы может использовать resource_filename() с именем каталога, чтобы получить каталог файловой системы, который затем можно скопировать с помощью модуля shutil. [...]