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

14 投票
1 回答
4193 浏览
提问于 2025-04-15 23:31

我正在把一个小的Python项目打包成zip或egg文件,以便可以分发。现在我发现了两种方法来包含项目的配置文件,这两种方法似乎效果是一样的。

方法一:

在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'])]
      )

方法二:

在setup.py文件中加入这段代码:

from distutils.core import setup

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

然后,创建一个名为MANIFEST.in的文件,里面写上这一行:

include config\* 

这两种方法有什么区别吗?哪种更好呢?我个人比较倾向于第一种,因为这样就不需要MANIFEST.in文件了。不过,第一种方法需要逐个指定每个文件,而第二种方法可以直接包含整个文件夹。还有其他我需要考虑的事情吗?一般的做法是什么?

1 个回答

30

MANIFEST.in 文件用来控制当你运行 python setup.py sdist 时,哪些文件会被打包进分发的压缩文件里。它并不决定哪些文件会被安装。data_files(或者更好的选择是 package_data)则控制哪些文件会被安装(我觉得它也会确保这些文件被包含在压缩文件里)。你可以用 MANIFEST.in 来处理那些你不打算安装的文件,比如文档,而 package_data 则用来处理那些你需要但不是 Python 代码的文件,比如图片或模板。

撰写回答