Предположим, что нам назвали программу 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.
Похоже, что простого способа не существует. Проблема в том, что файлы конфигурации - это особые данные и они заслуживают особого обращения.
Итак, напишем собственный класс:
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
}
)