使用setuptools / distribute打包资源

时间:2009-11-13 23:49:27

标签: python setuptools distribute pypi

我正在开发一个Python蛋,它有几个.txt依赖项(它们是用于通过egg本身生成文件的模板),而且我很难在{site-packages期间将这些依赖项复制到setup.py install 1}}。根据{{​​3}} ...

我的软件包的文件系统:

setup.py
package
|--- __init__.py
|--- main.py
|--- binary (calls main.py with pkg_resources.load_entry_point)
|--- templates
     |--file1.txt
     |--file2.txt

在setup.py中:

setup(
    [...]
    eager_resources = ['templates/file1.txt', 'templates/file2.txt']
)

在我的包裹中:

from pkg_resources import resource_string
tpl = resource_string(__name__, 'templates/file1.txt')

...配置和文件系统的这种组合应该导致file1.txtfile2.txt通过pkg_resources.resource_string可用。不幸的是,在site-packages期间,它们未被复制到setup.py install。我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:4)

您是否查看了setuptools文档,其中包含了数据包数据:http://peak.telecommunity.com/DevCenter/setuptools#including-data-files

基本上,您只需在setup.py文件中设置include_package_data=True即可。如果您使用的是subversion或CVS,则将包含所有版本化文件。如果没有,您可以使用MANIFEST.in文件指定要包含的文件。

我相信发行也支持这一点。

然后,您可以像打包文件一样访问文件。即在main.py中你可以:

import os.path
f = open(os.path.join(os.path.dirname(__file__),'templates','file1.txt'))
print f.read()
f.close()

这也适用于打包版本。需要注意的是,您还必须在setup.py中设置zip_safe = False,以便在安装过程中解压缩所有文件。