Как обработать конфигурационные файлы с distutils для уважения FHS unixen?

Предположим, что нам назвали программу foo.

Если полный путь использования:

setup(...,
      data_files=[...,
              ('/etc', ['foo.cfg'])]
)

Затем foo$ python setup.py --prefix=/usr/local и мы будем иметь /etc/foo.cfg. Но мы должны иметь /usr/local/etc/foo.cfg вместо этого согласно FHS.

Что, если мы используем относительный путь?

setup(...,
      data_files=[...,
              ('etc', ['foo.cfg'])]
)

Затем, если мы будем использовать путь установки по умолчанию, т.е. устанавливать на/usr, то мы будем иметь /usr/etc/foo.cfg. Неудача снова.

Таким образом, как сделать это правильный?

P.S. Для предотвращения делают проблему более сложной, мы предполагаем что эта программа foo не может работать под не среда Unix.

10
задан alk 3 October 2015 в 08:00
поделиться

1 ответ

Похоже, что простого способа не существует. Проблема в том, что файлы конфигурации - это особые данные и они заслуживают особого обращения.

Итак, напишем собственный класс:

class myinstall(distutils.command.install.install):
    if self.prefix == '/usr':
        self.conf_prefix = '/etc'
    else:
        self.conf_prefix = self.prefix + '/etc'

    install.finalize_options(self)

    def install_conf(self):
        self.mkpath((self.root or '') + self.conf_prefix)
        for file in self.distribution.conf_files:
        dest = (self.root or '') + self.conf_prefix + '/' +
            os.path.basename(file)
        self.copy_file(file, dest)

    # blah blah blah

Тогда:

setup(# blah blah blah
  conf_files = ['foo.cfg']
  cmdclass = {'install': myinstall,
      # blah blah blah
  }
)
5
ответ дан 4 December 2019 в 01:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: