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