python – 使用setuptools / distribute打包资源

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

我的包的文件系统:

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.txt和file2.txt通过pkg_resources.resource_string可用.不幸的是,在setup.py安装期间,它们没有被复制到site-packages.我错过了什么?

谢谢!

解决方法:

您是否查看过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,以便在安装期间解压缩所有文件.

上一篇:python中的setuptools错误


下一篇:pip上的错误代码1安装MySQL-python