2009-11-19 129 views
5

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

这会导致css破碎,图像断开和链接断开,因为这些其他文件似乎没有解压;它们存在于蛋文件中,但不存在于蛋目录中。

我在这里错过了什么吗?有没有办法强制解包所有的HTML,CSS,图像文件立即?

回答

4

我看你已经找到了另一个的方式来做到这一点,但为了将来的参考,这里是非解决方法来做到这一点omatically,从http://peak.telecommunity.com/DevCenter/setuptools#automatic-resource-extraction文档[强调]:

如果您使用的是期待你的资源是“真实”的文件,或您的项目包括非扩展本机库或其他文件,你的C扩展工具希望能够访问,您可能需要在eager_resources争论这些文件列出设置(),,以便这些文件将被一并提取

所以,在这种情况下,你想要做什么有:

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

在您的设置。py,当你询问index.html时(假设你的例子中的'doc'是一个顶级包),这会导致'html'目录被递归提取。

(你可以找到更多关于http://peak.telecommunity.com/DevCenter/setuptools#new-and-changed-setup-keywordseager_resources关键字的文档)

+0

非常感谢您的洞察! – 2010-01-30 11:19:03

1

可能的原因:并非所有的文件都包含在鸡蛋中。

  • 通过解压缩.egg(您可能需要将其重命名为Windows上的.zip文件)来检查此问题。检查是否所有的内容都在那里。

  • 看看你是如何制造鸡蛋的。你使用MANIFEST.in文件告诉setuptools要包含哪些文件?如果没有,你可能会相信setuptools会自动包含subversion文件。所有Subversion的文件都会自动结束,python文件会自动完成,其余的不会。

  • sphinx文档可能会生成,所以它不在subversion中,所以它不会自动包含。

两个解决方案:

+0

感谢您的答案,但正如我所说:” ......因为这些其他文件似乎并没有得到解压;它们存在于蛋文件中,但不存在于蛋目录中。“只有index.html在这个目录中,没有其他的东西(例如css,其他HTML) – 2009-11-20 11:53:56

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) 

的伎俩