【问题标题】:Using PySide's QtWebKit under Windows with py2exeWindows下用py2exe使用PySide的QtWebKit
【发布时间】:2011-01-07 19:46:38
【问题描述】:

我正在使用 PySide 和 Qt 在 Python 中制作应用程序,并且我需要打开一个网页,所以我使用了 QtWebKit 的 QWebView。

在我的开发机器上它工作得很好,直接运行代码和运行 py2exe 的输出。在“干净”的机器上(没有安装 Python 和 Qt),py2exe 的输出不显示网页。应用程序的其余部分工作正常,没有崩溃或异常,但 QWebView 只是保持空白。

我尝试打开一个没有图像或其他内容的 URL,以防止与缺少 WebKit 插件相关的任何问题。我还尝试了一个简单的程序,它只在 QWebView 上打开 example.com,没有别的,它也没有工作。

有没有人遇到过类似的情况?此外,任何人都知道 QWebKit 是否有任何 py2exe 可能不会被拉入“包”的“记录较少”的依赖项?

【问题讨论】:

  • 一台“几乎干净”且没有 py2exe 的机器呢?哪个版本的 Windows?您是否尝试过使用静态内容(file:///...)?

标签: python qt py2exe qtwebkit pyside


【解决方案1】:

我会尝试 PyInstaller。在编译 PyQT 的东西时它似乎工作得很好,因为它嗅探依赖项并将它们打包(嗯,它似乎这样做)。我也在用 Python 制作一个 QT 应用程序,它输出了一个可以立即工作的二进制文件。

这是一个链接:http://www.pyinstaller.org/

祝你好运!

【讨论】:

  • +1 用于 pyinstaller,因为它通常在打包常规 PyQt 方面做得更好。考虑到 PySide 绑定,您的里程可能会有所不同,但绝对值得一试。
  • 答案被接受,因为虽然 PyInstaller 与 py2exe 有同样的问题,但它更有助于帮助我找到真正的问题:缺少 OpenSSL 库。通过将dll文件复制到py2exe(或PyInstaller)输出目录的基目录来解决。更多信息在这里:codeblog.vurdalakov.net/2009/11/…
  • 我认为它在 Windows 和 Linux 中的工作方式相同,但手动依赖也可以;)
  • 你试过 cxfreeze - 它似乎是 pyside 组推荐的。 cx-freeze.sourceforge.net
【解决方案2】:

对于仍然有一些麻烦的人,你去吧:

http://developer.qt.nokia.com/wiki/Packaging_PySide_applications_on_Windows

您需要从 py2exe 端手动包含它:)

【讨论】:

  • 是的,我是把它放到维基上的人。 ^^
【解决方案3】:

在 py2exe 选项中试试这个:

packages = ["PySide.QtNetwok"]

【讨论】:

    【解决方案4】:

    选择的答案实际上并没有回答问题。我有一个类似的问题,我的应用程序使用 pyside 和 QtWebKit,在我的开发机器上运行良好,在与 py2exe 捆绑后的用户机器上没有。

    首先你的 setup.py 应该明确包含 PySide.QtNetwork:link

    ...
    setup(
        ...
        options = {
            'py2exe': {
                ...
                'includes': ['PySide.QtNetwork'],
                ...
            }
        }
    ...
    

    之后,您应该打包 openSSL DLL:link

    here 获取win32openssl(你可以使用精简版) 将 libeay32.dll 和 ssleay32.dll 复制到您的项目文件夹中,并将它们作为数据文件添加到 setup.py 中,如下所示:

    ...
    setup(data_files=[('', ['libeay32.dll','ssleay32.dll'])],
    ...
    

    最后你需要添加图像支持: 将图像插件添加为数据文件,最后应该是这样的:

    ...
    setup(data_files=[("imageformats", glob(r'C:\Python27\Lib\site-packages\PySide\plugins\*.*')),('', ['libeay32.dll','ssleay32.dll'])],
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      相关资源
      最近更新 更多