我想打包一个包含(并使用)模板html文件的项目,并将其作为一个鸡蛋分发。因为我使用tornadoweb,它需要文件路径指向html文件,所以我无法通过流访问资源,而且我真的需要在程序运行时提取html文件。
我正在查看setuptools,根据resource_filename
文档(粗体是我的):
有时,以字符串或流形式访问资源是不够的,需要一个真正的文件系统文件名。在这种情况下,可以使用此方法(或模块级函数)获取资源的文件名。如果资源位于存档分发版(例如压缩的鸡蛋)中,它将被解压到缓存目录中,缓存中的文件名将被返回。如果命名的资源是一个目录,那么该目录中的所有资源(包括子目录)也会被提取。如果命名的资源是C扩展或“急切资源”(请参阅
setuptools
文档以获得详细信息),则所有C扩展和急切资源同时提取。
这似乎正是我所需要的。然而,这不是发生在我的机器上。我的setup.py
包含以下行:
data_files = [('html', ['html/index.html'])]
index.html
实际上包含在我的鸡蛋文件中。当我运行python3 setup.py install
时,我的项目被安装为一个压缩的鸡蛋文件。不幸的是,当我的程序执行以下行时:
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
但是那里没有提取任何内容(是的,我正在以根用户的身份运行程序,但我只是在测试它)。
知道为什么我的html
目录不被解压缩吗?
发布于 2014-03-13 16:53:19
找到了问题的原因。正如@erykson所指出的那样,我使用了错误的目录。
更换后
html_path = resource_filename(__name__, "html")
使用
html_path = resource_filename(Requirement.parse("myproj"), "html")
一切都很好。
https://stackoverflow.com/questions/22381146
复制相似问题