在Python发行版中包含文件的两种技术:哪种更好?
我正在把一个小的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 代码的文件,比如图片或模板。