在Python发行版中包含文件的2种技术:哪种更好?

时间:2010-06-03 18:26:41

标签: python distribution distutils

我正在将一个小型Python项目打包为zip或egg文件,以便分发它。我有两种方法可以包含项目的配置文件,这两种方法似乎都会产生相同的结果。

方法1:

在setup.py中包含此代码:

from distutils.core import setup

setup(name='ProjectName', 
      version='1.0', 
      packages=['somePackage'],
      data_files = [('config', ['config\propFiles1.ini', 
                                'config\propFiles2.ini', 
                                'config\propFiles3.ini'])]
      )

方法2:

在setup.py中包含此代码:

from distutils.core import setup

setup(name='ProjectName', 
      version='1.0', 
      packages=['somePackage']
      )

然后,使用此行创建一个MANIFEST.in文件:

include config\* 

方法之间有什么区别吗?哪一个更受欢迎?我倾向于倾向于第一个,因为那时根本不需要MANIFEST.in文件。但是,在第一种方法中,您必须单独指定每个文件,而在第二种方法中,您可以只包括整个文件夹。还有什么我应该考虑的吗?什么是标准做法?

1 个答案:

答案 0 :(得分:26)

MANIFEST.in控制在您调用python setup.py sdist时将哪些文件放入分发zip文件中。它控制安装的内容。 data_files(或更好package_data)控制安装的文件(我认为还确保文件包含在zip文件中)。对于您不会安装的文件(如文档),请使用MANIFEST.in;对于您使用的非Python代码的文件(如图像或模板),请使用package_data