使用setuptools/distribute打包资源
我正在开发一个Python的包,这个包需要用到几个.txt文件(这些文件是用来生成其他文件的模板),但我在把这些文件复制到site-packages时遇到了困难,特别是在执行setup.py install的时候。根据distribute的文档...
我的包的文件结构:
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 install时,它们并没有被复制到site-packages。我漏掉了什么呢?
谢谢!
相关问题:
1 个回答
5
你可以在setuptools的文档中找到关于如何包含包数据的信息:https://setuptools.readthedocs.io/en/latest/setuptools.html#including-data-files
简单来说,你只需要在你的setup.py文件中设置 include_package_data=True。如果你使用的是subversion或CVS,所有版本控制的文件都会被包含进来。如果不是,你可以通过一个叫MANIFEST.in的文件来指定要包含哪些文件。
我相信distribute也支持这个功能。
这样一来,你就可以像平常一样访问这些文件,就好像它们没有被打包一样。比如在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,这样在安装时所有文件才能被解压。