首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pkg_resources.resource_filename没有提取文件

pkg_resources.resource_filename没有提取文件
EN

Stack Overflow用户
提问于 2014-03-13 14:07:09
回答 1查看 6.1K关注 0票数 4

我想打包一个包含(并使用)模板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目录不被解压缩吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-13 16:53:19

找到了问题的原因。正如@erykson所指出的那样,我使用了错误的目录。

更换后

html_path = resource_filename(__name__, "html")

使用

html_path = resource_filename(Requirement.parse("myproj"), "html")

一切都很好。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22381146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档