代码之家  ›  专栏  ›  技术社区  ›  weakish

如何使用distutils处理配置文件以尊重unixen的FHS?

  •  10
  • weakish  · 技术社区  · 16 年前

    假设我们有一个叫做 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/etc/foo.cfg 祝你好运。

    为了避免问题变得更复杂,我们假设这个程序 无法在非unix环境下运行。

    2 回复  |  直到 10 年前
        1
  •  5
  •   Alex Leach    13 年前

    distutils.command.install.install 不是绝对必要的。相反, data_files 可以传递给 setup ,根据 distutils 文件 'Installing Additional Files' .

    例如

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

    conf_path 是根据你自己的要求来计算的。i、 e.通过测试构建 sys.prefix (代替 self.prefix ),就像上面的@weakish一样。

        2
  •  5
  •   weakish    16 年前

    他们应该得到特殊待遇。

    所以,写我们自己的课:

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