我想打包一个包含(并使用)模板 html 文件的项目并将其作为鸡蛋分发。由于我使用的是 tornadoweb,它需要文件路径指向 html 文件,所以我无法通过流访问资源,我确实需要在程序运行时提取 html 文件。
我正在查看 setuptools 并根据resource_filename
文档(粗体是我的):
有时,以字符串或流形式访问资源是不够的,需要一个真正的文件系统文件名。在这种情况下,您可以使用此方法(或模块级函数)来获取资源的文件名。如果资源在存档分发中(例如压缩的鸡蛋),它将被提取到缓存目录,并返回缓存中的文件名。如果命名资源是一个目录,那么该目录中的所有资源(包括子目录)也会被提取。如果命名资源是 C 扩展或“eager 资源”(
setuptools
详情请参阅文档),则同时提取所有 C 扩展和 Eager 资源。
这似乎正是我需要的。然而,这不是我的机器上发生的事情。我的setup.py
包含以下行:
data_files = [('html', ['html/index.html'])]
并且index.html
实际上包含在我的 egg 文件中。当我运行python3 setup.py install
我的项目时,我的项目被安装为单个压缩的 egg 文件。不幸的是,当我的程序执行以下行时:
html_path = resource_filename(__name__, "html")
我得到以下返回值:
/usr/local/lib/python3.2/dist-packages/myproj-0.1-py3.2.egg/EGG-INFO/scripts/html/
问题是myproj-0.1-py3.2.egg
实际上是一个 zip 文件,所以这不是一个有效的路径。
这很奇怪,因为如果我打电话pkg_resources.get_cache_path(‘myproj’)
,我会得到以下路径:
/root/.python-eggs/myproj-tmp
但是那里没有提取任何内容(是的,我以 root 身份运行程序,但我只是在测试它)。
知道为什么我的html
目录没有被提取吗?