python - PySide 无法卡住 PyQt4 端口 - PyInstaller、py2exe 或 cx_Freeze

标签 python pyside py2exe pyinstaller cx-freeze

我将我编写的 PyQt4 应用程序移植到 PySide,但我无法为其创建可执行文件。我曾尝试使用 py2exe、cx_freeze 和 PyInstaller 为 PySide 创建 exe,前两个提供了类似的错误(在构建期间没有提供错误报告,在我尝试运行 exe 之前一切都很好)- PyQt4 版本可通过以下方式卡住py2exe.

系统信息

Windows 7,64 位 - 所有软件均为 32 位版本,低于所使用的软件包:

  • Python 2.7.3 通过 Python(x,y) 2.7.3.1
  • Qt 4.8.2
  • PySide 1.1.2
  • NumPy 1.6.2
  • Pywin32 218-1

Exe 转换程序

  • PyInstaller 2.0
  • cx_Freeze 4.3.1-1
  • py2exe 0.6.9

py2exe err.Log

Traceback (most recent call last):
File "myApp.pyw", line 11, in <module>
File "PySide\QtGui.pyc", line 12, in <module>

File "PySide\QtGui.pyc", line 10, in __load

ImportError: DLL load failed: The specified procedure could not be found.

cx_freeze err.Log

Traceback (most recent call last):
File "C:\Python27\Lib\site-packages\cx_Freeze\initscript\Console.py",
line 27, in <module>
exex code in m.__dict__
File "myApp.pyw", line 11, in <module>
File "ExtensionLoader_PySide_QtGui.py", line 11, in <module>
ImportError: DLL load failed: The specified procedure could not be found.

仅供引用: MyApp.pyw 的第 11 行 = from PySide import QtGui, QtCore

PyInstaller err.Log

"The application has failed to start because its side-by-side configuration is 
incorrect. Please see the application event log or use the command-line sxstrace.exe
tool for more detail."

我能找到的最接近的是 here但我没有使用那个库,所以我认为它不适用,我也不知道如何解决这个问题。

关于 PyInstaller 错误的 SxsTrace 片段

INFO: Reference: Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32    ",version="9.0.21022.8"

我尝试过的

  1. 将“C:\Python27\Lib\site-packages\PySide”放在环境变量路径的开头

  2. 将以下文件的副本:msvcr90.dll、msvcp90.dll、msvcm90.dll 放入 Python/dll 位置:我相信 msvcp90.dll 单独允许 py2exe 生成可运行的 PyQt4 exe

  3. 使用 pyside-rcc 重新制作所有 qrc 资源文件

  4. 将所有 pyside/dll 放入 dist 文件夹 (py2exe)

  5. 运行 sxstrace 并在 PyInstaller 错误上生成日志文件 - 不确定我在寻找什么我没有看到事件查看器或 msgbox 没有告诉我的任何东西(只是更多)

  6. 重新安装了所有 python/modules、pyqt、pyside、VSE2008 C++ 版本、microsoft SDK、microsoft .netframe work 2.0?、Microsoft Visual C++ 2008 Redistributable Package,

  7. 移植了包不需要但在目录中的所有进行中的模块

  8. 删除了所有未成功移植/未连接的 WIP 模块

  9. 复制(手动不是 setup.py)qt.conf(pyside 似乎不存在,只有 pyqt4?)和 dist 文件夹的插件

最佳答案

我设法使用 py2exe 获得了一个工作的可执行文件(在 PyInstaller 中根本没有使用 cx_freeze)。我能够通过将每个模块转换为独立的 exe 来调试它。

  • 这设法揭示了无法通过其他方式复制的错误。
  • 上述错误的主要问题是缺少在一个模块中将 PyQt4 转换为 PySide

请注意,这是一个数据加载模块,一定是在创建 exe 之前测试我的端口时错过了点击它。所有其他 PySide 转换都已完成。

注意:

from PySide import QtCore, QtGui

即使您的 IDE 说 QtCore 未在使用中并且 python 运行该模块也没有问题,它始终是必需的。这是为该模块制作一个 exe 所必需的,即使你可以在没有 QtCore 的情况下通过 Python 使它工作。

这并不是制作主窗口的 exe 实际需要的,但能够为模块创建一个可操作的 exe 是有帮助的。


转换计划结果

py2exe - 工作!

没什么特别的,只需一个标准的 setup.py 文件即可。

cx_Freeze

有点工作,但它的行为不稳定并且没有提供解释为什么......

我有 3 个几乎相同的数据加载过程,主要区别在于它们加载的文件。较小的文件加载很好,较大的文件在运行之前只是挂起并退出某个地方......当将 msgbox 放在它们前面时甚至无法让它们工作。

同样,我有一个对话框,它必须在 show() 之前检索数据并进行一些计算...它什么都不做 - 不知道为什么。主窗口和大部分程序都可以正常工作。

PyInstaller

我可以为所有单独的模块创建 exe,但不能为主窗口模块创建。当尝试运行它时,我收到了与 Ticket#590 完全相同的问题。除了我使用的是 pywin32-218 并且没有 Pandas 。

当试图运行这个时: 导入错误:没有名为 pythoncom 的模块

构建过程表明: 警告:pythoncom 正在将其名称更改为 pythoncom27 警告:pywintypes 正在将其名称更改为 pywintypes27

真正奇怪的部分是实际上从 pywin32 导入的模块可以变成一个可运行的 exe。调用此模块的小部件也可以,但调用这些其他小部件的主窗口会给出错误。

PyInstaller 第二期

所有重新实现关闭事件的独立小部件在关闭时挂起。

def closeEvent(self, event):
    self.results.addResultsToDB()
    event.accept()

上述情况不会发生在 py2exe 作为独立应用程序时。

关于python - PySide 无法卡住 PyQt4 端口 - PyInstaller、py2exe 或 cx_Freeze,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14152741/

相关文章:

python - Qt 平台插件 'windows' - py2exe

python - 使用 py2exe 创建了一个 .exe,但是当我将粘贴从 "dist"文件夹复制到桌面时,无法正常运行

python - 它在 awk 中可能更简单,但我怎么能在 Python 中这样说呢?

python - 如何控制 QToolBar 中的 QAction 按钮间距?

python - 在 PySide PyQt 中拖放 QAbstractItemModel

python - PySide Phonon 错误,后端插件无法加载

python - PIL 和 py2exe 的问题

python - 如何使用 Python/Pandas 转换为正态分布?

python - 将 MKL 优化的 numpy.dot() 与 3d 数组结合使用

python - celery 记录到文件中