11

我正在开发一个 Python egg,它有几个 .txt 依赖项(它们是由 egg 本身生成文件的模板),我正在努力将这些依赖项复制到 .txt 文件site-packagessetup.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. 不幸的是,它们没有被复制到site-packages. setup.py install我错过了什么?

谢谢!

4

1 回答 1

5

您是否查看过 setuptools 文档以在此处包含包数据:https ://setuptools.readthedocs.io/en/latest/setuptools.html#include-data-files

基本上,您只需要include_package_data=True在 setup.py 文件中进行设置。如果您使用的是 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()

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

于 2009-11-14T00:23:45.347 回答