我正在开发一个具有几个.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,以便在安装期间解压缩所有文件.