UnixenのFHSを尊重するためのDistutilsで構成ファイルを処理する方法?

StackOverflow https://stackoverflow.com/questions/3325606

  •  29-09-2020
  •  | 
  •  

質問

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_filessetupに渡すことができます。追加ファイルのインストール '。

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
  }
)
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top