Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Архитектура системы управления пакетами в Python

Глава 14 из 1 тома книги "Архитектура приложений с открытым исходным кодом".

Оригинал: Python Packaging
Автор: Tarek Ziade
Дата публикации: 7 Июня 2012 г.
Перевод: А.Панин
Дата публикации перевода: 3 апреля 2013 г.

Creative Commons. Перевод был сделан в соответствие с лицензией Creative Commons. С русским вариантом лицензии можно ознакомиться здесь.


14.3 Современная архитектура системы управления пакетами

14.3.6. Как насчет файлов данных?

В Distutils файлы данных могут быть установлены в любую директорию. Если вы зададите список файлов данных пакета в сценарии setup.py подобным образом:
setup(...,
  packages=['mypkg'],
  package_dir={'mypkg': 'src/mypkg'},
  package_data={'mypkg': ['data/*.dat']},
  )

то все файлы с расширением .dat в проекте mypkg будут включены в архив для распространения и в конечном счете установлены вместе с модулями Python с помощью системы установки.

Для файлов, устанавливаемых вне директории проекта Python, существует другой параметр, позволяющий хранить файлы в архиве, но размещать их в заданных директориях при установке:
setup(...,
    data_files=[('bitmaps', ['bm/b1.gif', 'bm/b2.gif']),
                ('config', ['cfg/data.cfg']),
                ('/etc/init.d', ['init-script'])]
    )
Это очень плохие новости для поддерживающих пакеты для операционных систем лиц по нескольким причинам:
  • Файлы данных не являются частью метаданных, поэтому работающим над пакетами лицам придется исследовать файл setup.py, а иногда и код проекта.
  • Разработчик не должен принимать единоличное решение о том, где будут расположены файлы данных в целевой системе.
  • Для файлов данных не существует категорий: изображения, страницы руководств man и все другие файлы обрабатываются аналогичным образом.

Человек, желающий повторно упаковать проект с такими файлами, не имеет иного пути, кроме как разработать патч для файла setup.py для того, чтобы он работал так, как требуется на данной платформе. Для этого ему придется исследовать код и заменить каждую строку, где используются эти файлы, так как разработчик задал их расположение в системе. Проекты Setuptools и Pip не улучшили эту ситуацию.


Далее: 14.4. Усовершенствованные стандарты