2012-05-01 58 views
4

我有一些夾具目錄包含xml文件,我希望在使用bdist_rpm構建RPM時將其包含在我的python項目中。我想我可以通過MANIFEST.in做一個recursive-include * *,但是,它不包含除* .py文件以外的任何內容。無論如何bdist_rpm包含非python文件或特別包含* .xml文件?使用setuptools在RPM中包含非python文件

回答

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

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