强制解压某些egg目录
-
21-09-2019 - |
题
我有一个我自己构建的 PyQt 应用程序的 Egg 发行版,它包含 sphinx 生成的文档。当我从应用程序调用帮助文件时,它会在 QtWebKit.QWebView 窗口中打开 sphinx index.html 。显然,只有index.html 文件从egg 中提取到操作系统的egg 目录中(例如Windows 下的 [..]\Application Data\Python-Eggs\)。
这会导致 css、图像和链接损坏,因为这些其他文件似乎没有被解压;它们存在于 Egg 文件中,但不存在于 Egg 目录中。
我在这里错过了什么吗?有没有办法立即强制解压所有html、css、图像文件?
解决方案
我发现您已经找到了另一种方法来做到这一点,但为了将来的参考,这里是自动执行此操作的非解决方法,来自文档: http://peak.telecommunity.com/DevCenter/setuptools#automatic-resource-extraction [强调]:
如果您使用的工具期望资源是“真实”文件,或者您的项目包含非扩展本机库或 C 扩展期望能够访问的其他文件,则可能需要在 eager_resources 参数中列出这些文件建立(), 这样文件就会一起提取
所以,在这种情况下,你想做的是:
eager_resources=['doc/sphinx/build/html', 'doc/sphinx/build/html/index.html']
在你的 setup.py 中,这将导致当你请求 index.html 时递归地提取“html”目录(假设示例中的“doc”是顶级包)。
(您可以了解更多关于 eager_resources
文档中的关键字 http://peak.telecommunity.com/DevCenter/setuptools#new-and-changed-setup-keywords)
其他提示
def get_help_url(self):
from pkg_resources import resource_filename
from doc import sphinx
import os
from PyQt4.QtCore import QUrl
html_path = resource_filename(sphinx.__name__, os.path.join('build', 'html'))
return QUrl(os.path.join(html_path, 'index.html'))
代替
的 html = resource_filename(sphinx.__name__, os.path.join('build', 'html', 'index.html'))
return QUrl(html)
确实起作用
可能的原因:首先,并非所有文件都包含在 Egg 中。
通过解压缩 .egg 来检查这一点(在 Windows 上,您可能需要将其重命名为 .zip 文件)。检查所有内容是否都在那里。
看看鸡蛋是怎么做的。您是否使用 MANIFEST.in 文件来告诉 setuptools 要包含哪些文件?如果没有,您可能信任 setuptools 自动包含 subversion 文件。所有经过颠覆的文件都会自动出现在 Egg 中,Python 文件会出现这种情况,其余的则不会。
sphinx 文档可能已生成,因此它不在 subversion 中,因此不会自动包含在内。
两种解决方案:
使用 MANIFEST.in 文件手动指定(通配符有效)应包含的所有文件。只要你完成了,就不会出现故障。
或者将html文件指定为package_data,请参阅 setuptools 如何决定为 sdist/bdist 保留哪些文件?