这个问题假设我想安装的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-package
和python-package-with-data-files
两个包已经成功安装在eggs/
目录下。因为python-package-with-data-files
在其setup.py
文件中将zip_safe
设置为False
,所以它在eggs/
中是未压缩的状态。只有
python-package-with-data-files
的非.py
文件在未压缩的egg中不可用(这些文件包含在.tar.gz
包中,可从http://domain-to-python-package-with-data-files
获取)。如何使这些数据文件包含在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
。
setup.py
中使用include_package_data = True
。我之前尝试过这个方法,但认为它不影响媒体文件。问题出在sdist
和bdist
命令使用了来自package….egg-info/
目录的缓存版本的文件列表。所以在运行sdist
和bdist
之前删除此目录非常重要。感谢Carl Meyer鼓励我继续我的旅程 :-) - Gregor Müllegger