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

fro*_*die 13 python distutils distribution

我正在打包一个小的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'])]
      )
Run Code Online (Sandbox Code Playgroud)

方法2:

在setup.py中包含此代码:

from distutils.core import setup

setup(name='ProjectName', 
      version='1.0', 
      packages=['somePackage']
      )
Run Code Online (Sandbox Code Playgroud)

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

include config\* 
Run Code Online (Sandbox Code Playgroud)

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

Ian*_*ing 27

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

  • 请注意,data_files或package_data中列出的文件不会自动包含在即将发布的2.7版本之前的任何Python版本的sdist中(这是在上一个发布周期内修复的distutils错误).实际上,对于当前发布的Python版本,如果需要安装文件,则必须将它们列在data_files/package_data和MANIFEST.in中. (5认同)