2015-09-16 73 views
8

我有一個python應用程序,它具有我無法更改的固定佈局。我想用setuptools來包裝它,例如寫一個setup.py腳本。setuptools:在包外添加其他文件

使用官方文檔,我能夠編寫第一個模板。但是,有問題的應用程序使用了很多附加的數據文件,這些文件並不是任何軟件包的明確部分。這裏有一個例子源代碼樹:

somepackage 
    __init__.py 
    something.py 
    data.txt 
additionalstuff 
    moredata.txt 
INFO.txt 

這裏的麻煩:在something.py的代碼讀取文件moredata.txtINFO.txt。對於前者,我可以通過添加一個空的additionalstuff/__init__.py文件來解決問題,以將additionalstuff升級到一個包,並使其獲得setuptools。但是,我怎麼可能將INFO.txt添加到我的.egg?利用沿

package_data = { '' : ['moredata.txt','INFO.txt']} 

線的東西對我不起作用,因爲這些文件moredataINFO.txt不屬於一個包,而是單獨的文件夾的一部分

編輯

所提出的解決方案這只是整個模塊的一部分,而不是任何單獨的軟件包。 如上所述,這可以在moredata.txt的情況下通過將__init__.py文件添加到additionpythonalstuff來固定,從而將其推廣到包中。但是,這不是一個優雅的解決方案,並且根本不適用於生活在頂層目錄中的INFO.txt

解決方案

基於公認的答案,這裏的解決方案

這是setup.py

from setuptools import setup, find_packages 

setup(
    name='mytest', 
    version='1.0.0', 
    description='A sample Python project', 
    author='Test', 
    zip_safe=False, 
    author_email='[email protected]', 
    keywords='test', 
    packages=find_packages(), 
    package_data={'': ['INFO.txt', 'moredata.txt'], 
        'somepackage':['data.txt']}, 
    data_files=[('.',['INFO.txt']), 
       ('additionalstuff',['additionalstuff/moredata.txt'])], 
    include_package_data=True, 
) 

這是MANIFEST.in

include INFO.txt 
graft additionalstuff 
include somepackage/*.txt 
+1

可能的重複[包括非Python文件與setup.py](http://stackoverflow.com/questions/1612733/including-non-python-files-with-setup-py) – pacholik

+1

它不是重複的。在給定的問題中,可接受的解決方案是使用'package_data'。這我已經完成了。請注意,使用''''(空字符串)的給定解決方案對我來說不起作用,因爲它明確指向「所有包」,這不適用於我,因爲我要添加的文件不屬於*任何*包,這正是我面臨的問題。 – carsten

回答

2

還有data_files

data_files=[("yourdir", 
      ["additionalstuff/moredata.txt", "INFO.txt"])], 

有一個地想想你希望把這些文件。更多信息在docs

0

您需要使用package_data。把你的setup.py在根目錄下,然後你只需要:

package_data={'': [ 
    'somepackage/*.txt', 
    'additionalstuff/*.txt', 
    '*.txt', 
] 
+1

這個響應依賴於''''的特徵來引用「所有包」。然而,文件'INFO.txt'不屬於*任何*包,因此不會被拾取。 – carsten

+0

它確實對我有用。我有完全相同的目錄樹配置,並且在我的項目的根目錄中,我只有一個README.md和setup.py。使用package_data正確包含README.md。 –

+0

這讓我感到驚訝。我創建了一個小型測試用例,並再次觀察同樣的問題。你似乎做了與我所做的不同的事情。你能提供一個鏈接到所提到的項目,以便我可以調查這個架構嗎? – carsten