10

というプログラムがあるとしfooます。

絶対パスを使用する場合:

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

そしてfoo$ python setup.py --prefix=/usr/local、私たちは持ってい/etc/foo.cfgます。しかし、 FHS/usr/local/etc/foo.cfgによると、代わりに持つべきです。

相対パスを使用するとどうなりますか?

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

次に、デフォルトのインストール パス、つまり /usr へのインストールを使用すると、/usr/etc/foo.cfg. また不運。

では、それを正しく行う方法は?

PS 問題が複雑になるのを避けるため、このプログラム fooは非 UNIX 環境では実行できないと想定しています。

4

2 に答える 2

5

簡単な方法はないようです。問題は、設定ファイルが特別なデータファイルであり、特別な扱いを受けるに値することです。

したがって、独自のクラスを作成します。

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
  }
)
于 2010-07-26T17:17:31.273 に答える