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'])
]
)