2010-06-08 51 views
19

我是新來的distutils ..我想包括與包一起幾個數據文件..這裏是我的代碼..Python distutils來不包括data_files

from distutils.core import setup 

setup(name='Scrapper', 
     version='1.0', 
     description='Scrapper',  
     packages=['app', 'db', 'model', 'util'], 
     data_files=[('app', ['app/scrapper.db'])]  
    ) 

執行python setup.py sdist後創建的zip文件不包含scrapper.db文件。我已經scrapper.db應用程序目錄文件..

感謝您的幫助。

+2

無關你的問題了一句話:我建議你使用一個頂層包名稱,例如刮板,而不是使用四個非常廣泛使用的名稱爲四個包。 – 2011-08-23 05:35:56

+0

你使用什麼python版本? – 2015-04-30 11:08:53

回答

21

你可能需要添加一個MANIFEST.in文件,其中包含"include app/scrapper.db"

這是一個distutils中的錯誤,這使得這個必要:data_filespackage_data中的任何東西都應該包含在生成的MANIFEST中。但在Python 2.6和更早的版本中,它不是,所以你必須將它包含在MANIFEST.in中。

該缺陷被固定在Python 2.7。

+3

我仍然遇到與Python 2.7.1+相同的問題。我發現[這個錯誤報告](http://bugs.python.org/issue2279),但我不明白爲什麼狀態是「提交/拒絕」。任何指導如何解決而不回落到使用MANIFEST.in?謝謝! – mac 2011-08-22 00:10:57

+1

已提交/拒絕的狀態與已修復的錯誤一起使用。 – 2011-08-23 05:33:54

1

嘗試刪除清單,distutils的這種方式將被迫重新生成。

注:我一直在使用python 3.x的,所以我不知道這是否與2.x或沒有。

+0

你誤解了我的答案。我不建議創建一個MANIFEST文件。我正在討論清單模板文件「MANIFEST.in」。這允許您添加自動生成的MANIFEST中包含的內容。由於所有Python版本(包括2.6以下版本)中distutils的錯誤,除非將其添加到MANIFEST.in文件中,否則data_files和package_data條目不會包含在自動生成的MANIFEST中。 – 2010-06-11 01:03:37

+0

@Carl Meyer我沒有評論你做過什麼或沒有說過什麼。我只想引用一個更詳細的答案(這不是我的主要觀點)。我一般使用MANIFEST;我可能應該寫MANIFEST.in(我已經改變了它。)對不起,如果我歪曲你的答案。 – Matthew 2010-06-11 19:01:04

+0

不幸的是,你編輯的答案現在簡直是錯誤的:/ distutils爲你生成一個MANIFEST,不管你是否提供了MANIFEST.in。 MANIFEST.in允許您添加生成的MANIFEST文件的內容。 – 2010-06-11 20:35:12