2009-11-19 36 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) 

的伎倆