5

我有一个我自己构建的 PyQt 应用程序的 egg 分发版,它包含 sphinx 生成的文档。当我从应用程序调用帮助文件时,它会在 QtWebKit.QWebView 窗口中打开 sphinx index.html。显然,只有 index.html 文件从 egg 中提取到操作系统的 egg 目录中(例如 Windows 下的 [..]\Application Data\Python-Eggs\)。

这会导致 css 损坏、图像损坏和链接损坏,因为这些其他文件似乎没有被解包;它们存在于 egg 文件中,但不在 egg-directory 中。

我在这里错过了什么吗?有没有办法立即强制解压缩所有 html、css、图像文件?

4

3 回答 3

4

我看到您已经找到了另一种方法,但为了将来参考,这是自动执行此操作的非解决方法,来自http://peak.telecommunity.com/DevCenter/setuptools#automatic-的文档资源提取[强调添加]:

如果您使用的工具期望您的资源是“真实”文件,或者您的项目包含非扩展本机库或您的 C 扩展期望能够访问的其他文件,您可能需要在 eager_resources 参数中列出这些文件到 setup(),以便将文件一起提取

所以,在这种情况下,你想要做的是:

eager_resources=['doc/sphinx/build/html', 'doc/sphinx/build/html/index.html']

在您的 setup.py 中,这将导致在您请求 index.html 时递归提取“html”目录(假设您的示例中的“doc”是顶级包)。

(您可以在http://peak.telecommunity.com/DevCenter/setuptools#new-and-changed-setup-keywordseager_resources的文档中找到有关该关键字的更多信息)

于 2010-01-29T18:03:14.983 回答
2
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)

成功了

于 2009-11-20T13:58:12.977 回答
1

可能的原因:并非所有文件一开始都包含在 egg 中。

  • 通过解压缩 .egg 进行检查(您可能需要将其重命名为 .zip 文件,以便在 Windows 上使用该文件)。检查是否所有内容都在那里。

  • 看看你是怎么做鸡蛋的。您是否使用 MANIFEST.in 文件来告诉 setuptools 要包含哪些文件?如果没有,您可能相信 setuptools 会自动包含颠覆文件。所有被颠覆的文件都会自动以 egg 结尾,python 文件会这样做,其余的则不会。

  • sphinx 文档可能已生成,因此它不在 subversion 中,因此不会自动包含在内。

两种解决方案:

于 2009-11-19T12:17:04.963 回答