2010-06-08 53 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