【问题标题】:Include non python files in RPM with setuptools使用 setuptools 在 RPM 中包含非 python 文件
【发布时间】:2012-05-01 21:16:22
【问题描述】:

我有一些包含 xml 文件的夹具目录,我希望在使用 bdist_rpm 构建 RPM 时将这些文件包含在我的 python 项目中。我想我可以通过让 MANIFEST.in 执行 recursive-include * * 来做到这一点,但是,它不包含除 *.py 文件之外的任何内容。无论如何让 bdist_rpm 在包中包含非 python 文件或特别包含 *.xml 文件?

【问题讨论】:

    标签: python rpm setuptools


    【解决方案1】:

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

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

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

    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 执行此操作。

    【讨论】:

      【解决方案2】:

      您可以使用设置的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
      

      【讨论】:

        猜你喜欢
        • 2020-08-20
        • 1970-01-01
        • 2019-11-03
        • 2010-12-09
        • 2012-08-04
        • 1970-01-01
        相关资源
        最近更新 更多