我有一个PyQt应用程序的蛋分发,我自己构建,它包含sphinx生成的文档。当我从应用程序调用帮助文件时,它会在QtWebKit.QWebView窗口中打开sphinx index.html。显然,只有index.html文件从egg中提取到OS的egg目录中(例如Windows下的[..] \ Application Data \ Python-Eggs \。)
这导致css损坏,图像损坏和链接断开,因为这些其他文件似乎没有得到解压缩;它们存在于egg文件中,但不存在于egg目录中。
我在这里遗漏了什么吗?有没有办法强制立即解压缩所有的html,css,图像文件?
答案 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中,因此不会自动包含它。
两种解决方案:
使用MANIFEST.in文件手动指定(通配符可以正常工作)应包含的所有文件。只要你完成,就可以安全地使用。
或者将html文件指定为package_data,请参阅How does setuptools decide which files to keep for sdist/bdist?