我有一個python
應用程序,它具有我無法更改的固定佈局。我想用setuptools來包裝它,例如寫一個setup.py
腳本。setuptools:在包外添加其他文件
使用官方文檔,我能夠編寫第一個模板。但是,有問題的應用程序使用了很多附加的數據文件,這些文件並不是任何軟件包的明確部分。這裏有一個例子源代碼樹:
somepackage
__init__.py
something.py
data.txt
additionalstuff
moredata.txt
INFO.txt
這裏的麻煩:在something.py
的代碼讀取文件moredata.txt
和INFO.txt
。對於前者,我可以通過添加一個空的additionalstuff/__init__.py
文件來解決問題,以將additionalstuff
升級到一個包,並使其獲得setuptools
。但是,我怎麼可能將INFO.txt
添加到我的.egg
?利用沿
package_data = { '' : ['moredata.txt','INFO.txt']}
線的東西對我不起作用,因爲這些文件moredata
和INFO.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
可能的重複[包括非Python文件與setup.py](http://stackoverflow.com/questions/1612733/including-non-python-files-with-setup-py) – pacholik
它不是重複的。在給定的問題中,可接受的解決方案是使用'package_data'。這我已經完成了。請注意,使用''''(空字符串)的給定解決方案對我來說不起作用,因爲它明確指向「所有包」,這不適用於我,因爲我要添加的文件不屬於*任何*包,這正是我面臨的問題。 – carsten