Python 如何使用distutils处理配置文件以尊重unixen';什么是FHS?

Python 如何使用distutils处理配置文件以尊重unixen';什么是FHS?,python,distutils,fhs,Python,Distutils,Fhs,假设我们有一个名为foo的程序 如果使用绝对路径: setup(..., data_files=[..., ('/etc', ['foo.cfg'])] ) 然后foo$python setup.py--prefix=/usr/local,我们将得到/etc/foo.cfg。 但是我们应该使用/usr/local/etc/foo.cfg,而不是根据 如果我们使用相对路径呢 setup(..., data_files=[...,

假设我们有一个名为
foo
的程序

如果使用绝对路径:

setup(...,
      data_files=[...,
              ('/etc', ['foo.cfg'])]
)
然后
foo$python setup.py--prefix=/usr/local
,我们将得到
/etc/foo.cfg
。 但是我们应该使用
/usr/local/etc/foo.cfg
,而不是根据

如果我们使用相对路径呢

setup(...,
      data_files=[...,
              ('etc', ['foo.cfg'])]
)
然后,如果我们使用默认安装路径,即安装到/usr,我们将拥有
/usr/etc/foo.cfg
。坏的 祝你好运

那么如何正确地做呢

另外,为了避免使问题更加复杂,我们假设该程序
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
然后:


子分类
distutils.command.install.install
并非绝对必要。相反,可以根据上的
distutils
文档将
数据\u文件
传递到
设置

e、 g

其中,
conf_path
根据您自己的要求计算。i、 e.通过测试
sys.prefix
(而不是
self.prefix
)构建它,就像上面@weakish所做的那样

setup(# blah blah blah
  conf_files = ['foo.cfg']
  cmdclass = {'install': myinstall,
      # blah blah blah
  }
)
setup(
    ...
    data_files = [
        (conf_path, ['foo.cfg'])
    ]
)