UnixenのFHSを尊重するためのDistutilsで構成ファイルを処理する方法?
質問
foo
と呼ばれるプログラムがあるとします。
絶対パスを使用する場合:
setup(...,
data_files=[...,
('/etc', ['foo.cfg'])]
)
.
その後foo$ python setup.py --prefix=/usr/local
と/etc/foo.cfg
を持ちます。
しかし、代わりに fhs
相対パスを使用している場合は?
setup(...,
data_files=[...,
('etc', ['foo.cfg'])]
)
.
その後、デフォルトのインストールパス、すなわち/ usrをインストールすると、/usr/etc/foo.cfg
があります。悪い
幸運。
だからそれを正しくする方法?
p.S。問題をより複雑にするのを避けるために、このプログラムであると仮定する
foo
は、UNIX以外の環境で実行できません。
解決
サブクラスのdistutils.command.install.install
は厳密には必要ありません。代わりに、data_files
をsetup
に渡すことができます。追加ファイルのインストール '。
e.g.
setup(
...
data_files = [
(conf_path, ['foo.cfg'])
]
)
.
ここで、distutils
はあなた自身の要件に従って計算されます。すなわち、@ weakishが上記のように(conf_path
の代わりに)sys.prefix
をテストすることによって構築する。
他のヒント
簡単な方法がないようです。この問題は、設定ファイルが特別なデータであることです ファイルと彼らは特別な治療に値する。
だから、私たち自身のクラスを書く:
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
}
)
. 所属していません StackOverflow