使用setuptools在RPM中包含非python文件

时间:2012-05-01 21:16:22

标签: python rpm setuptools

我有一些包含xml文件的fixture目录,我希望在使用bdist_rpm构建RPM时包含在我的python项目中。我认为我可以通过让MANIFEST.in做recursive-include * *来做到这一点,但是,它不包括除* .py文件以外的任何内容。反正有没有bdist_rpm包含非python文件在包中或具体包括* .xml文件?

2 个答案:

答案 0 :(得分:3)

你想在哪里安装它们?如果你把它们放在一个包目录中,就像这样......

myproject/
  mypackage/
    __init__.py
    resources/
      file1.xml
      file2.xml

...您可以使用package_data文件中的setup.py选项,如下所示:

from setuptools import setup, find_packages

setup(
        name='myproject',
        version='0.1',
        description='A description.',
        packages=find_packages(),
        include_package_data=True,
        package_data = { '': [ '*.xml' ] },
        install_requires=[],
        )

这将递归地包含任何包内的任何*.xml个文件。它们将与Python库路径中的其他部分安装在一起。您可以使用MANIFEST.in执行相同操作,如下所示:

recursive-include * *.xml

如果您尝试将它们安装到Python库之外的特定文件系统位置,我不确定您是否可以通过setup.py执行此操作。

答案 1 :(得分:3)

您可以使用data_files设置参数来执行您需要的操作。像这样:

setup(
    ...
    package_data = { '/usr/share/yourapp/xmls': [ 'xmls/1.xml', 'xmls/2.xml' ] },
    ...
)

这会安装以下文件:

/usr/share/yourapp/xmls/1.xml
/usr/share/yourapp/xmls/2.xml

我通常在这样的函数中创建文件列表:

def get_xmls():
    xmlfiles = []
    for filename in os.listdir('xmls/'):
        if filename.endswith('.xml'):
            xmlfiles.append('xmls/%s' % filename)
    return xmlfiles