在buildout环境中安装包含数据文件的python egg

4 投票
1 回答
1971 浏览
提问于 2025-04-15 19:26

这个问题假设我想安装的python包是一个包含模板和媒体文件的django应用。但这个问题对于任何不只包含.py文件的python包都是有效的。

我正在使用buildout来创建一个可重建的环境,以便开发我的django项目。我的buildout.cfg文件看起来是这样的:

[buildout]
parts = python
eggs =
  normal-python-package
  python-package-with-data-files
find-files = 
  http://domain-to-python-package-with-data-files

[python]
recipe = zc.recipe.egg
interpreter = python
eggs = ${buildout:eggs}

(还有一些与django相关的内容)。python-package-with-data-files可以通过页面http://domain-to-python-package-with-data-files上的链接获取。

normal-python-packagepython-package-with-data-files都成功安装在eggs/目录下。因为python-package-with-data-files在它的setup.py文件中将zip_safe设置为False,所以它在eggs/中是以未压缩的形式可用的。

但是python-package-with-data-files中的非.py文件在eggs/中的未压缩包里是不可用的(它们确实包含在可在http://domain-to-python-package-with-data-files下载的.tar.gz包中)。

我该如何将这些数据文件包含在egg中?我需要修改这个包的setup.py文件吗?还是说这与buildout有关?

我发现的情况如下:

如果我在python-package-with-data-files的根目录下运行python setup.py sdist,所有数据文件都会被包含在创建的.tar.gz文件中。但如果我运行python setup.py bdist,则生成的包不包含数据文件。

这让我觉得问题并不是特定于buildout的。但也许有办法告诉buildout不要生成bdist,而是生成sdist来创建egg并将包安装到项目中。

我该怎么办?我是python-package-with-data-files的维护者,所以如果需要,我可以修改setup.py

1 个回答

3

听起来你需要在你的setup.py文件中使用一个叫做 package_data的参数,这样distutils才能知道哪些文件应该和你的包一起安装。

撰写回答