gpt4 book ai didi

python - CX-卡住 "ImportError: DLL load failed: %1 is not a valid Win32 application"

转载 作者:行者123 更新时间:2023-12-01 06:45:49 31 4
gpt4 key购买 nike

安装使用 cx-freeze 卡住的 python/pyqt/matplotlib 应用程序后出现错误。我用

构建应用程序
python setup.py build

setup.py是这个

from cx_Freeze import setup, Executable
buildOptions = dict(packages = [], excludes = [])
import sys
base = 'Win32GUI' if sys.platform=='win32' else None
executables = [
Executable('SectionPropertyCalculator.py', base=base)
]
setup(name='Mecanica-SectionPropertyCalculator',
version = '0.1',
description = 'SPC is a GUI to calculate geometrical properties of beam profiles.',
options = dict(build_exe = buildOptions),
executables = executables)

我明白

Mecanica-SectionPropertyCalculator-0.1-amd64.exe 

.exe 在我的开发机器上运行正常

然后我使用

创建一个 msi 安装程序
cx-freeze app bdist_msi

我明白

Mecanica-SectionPropertyCalculator-0.1-amd64.msi 

我将其安装到另一台具有相同操作系统、i5 处理器等的计算机上,但出现错误

File "C:\...SpcPlotQt.py", line 4 in <module> 
ImportError: DLL load failed: %1 is not a valid Win32 application

现在,SpcPlotQt.py 是我的代码,在第 4 行我有

from PyQt5.QtWidgets import QDialog, QApplication

我已经使用 pip3 安装了 PyQt5.5.13.2(全部 64 位),并且我很确定我安装了 python 3.7 x64,我通过确认

import struct; print( 8 * struct.calcsize("P"))
64

另外,如果我运行

import sys; print("%x" % sys.maxsize, sys.maxsize > 2**32)
True

import ctypes; print (ctypes.sizeof(ctypes.c_voidp))
8

import platform; platform.architecture()[0]
64bit

import os; os.environ["PROCESSOR_ARCHITECTURE"]
AMD64

以上 5 个测试表明一切都是 64 位。

但是当我运行时

import sys; print (sys.platform)
win32

为什么?

并且... cx-freeze 脚本使用 sys.platform 来决定使用什么基础,因此它选择

base=Win32GUI

我该怎么办?

我注意到 python setup.py build 运行在 cmd shell 之外,无论我如何打开它,它始终是 32 位;甚至 PowerShell 也是 32 位的。这可能是问题所在吗?

最佳答案

在 90% 的情况下,此错误是 64 位和 32 位混合造成的。假设你这里所有的测试都是准确的,我猜你正在使用的开发机器有64位的一切,但另一台Windows机器要么有一个为32位设计的DLL,要么Windows系统本身是32位安装(甚至如果机器本身是 64 位)。

不必担心 sys.platform 返回 win32,这就是它的作用。

在两台机器上尝试基本操作:右键单击文件资源管理器中的计算机,然后单击属性 - 查看 Windows 安装是 32 位还是 64 位。如果另一台机器是 32 位,那么除非您愿意更改操作系统,否则您的 exe 与其不兼容。

另一种解决方案:在您的开发计算机上安装 python 32 位版本,用它制作 exe 文件几乎可以保证它可以在 32 位和 64 位系统上运行。

关于python - CX-卡住 "ImportError: DLL load failed: %1 is not a valid Win32 application",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59229385/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com