我有一个我自己构建的 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 中,因此不会自动包含在内。

两种解决方案:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top