强行打开某些鸡蛋目录

时间:2009-11-19 10:26:50

标签: python setuptools python-sphinx egg

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

这导致css损坏,图像损坏和链接断开,因为这些其他文件似乎没有得到解压缩;它们存在于egg文件中,但不存在于egg目录中。

我在这里遗漏了什么吗?有没有办法强制立即解压缩所有的html,css,图像文件?

3 个答案:

答案 0 :(得分:4)

我看到你已经找到了另一种方法,但是为了将来的参考,这里是自动执行它的非解决方法,来自http://peak.telecommunity.com/DevCenter/setuptools#automatic-resource-extraction的文档[强调添加]:

  

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

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

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-keywords处的文档中找到有关eager_resources关键字的详情

答案 1 :(得分: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)

做了这个伎俩

答案 2 :(得分:1)

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

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

  • 看看你是怎么做鸡蛋的。您是否使用MANIFEST.in文件告诉setuptools要包含哪些文件?如果没有,你可能会相信setuptools自动包含subversion文件。所有subversion'ed文件自动结束在egg中,python文件自动结束,其余文件没有。

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

两种解决方案: