cxfreeze“导入错误:DLL加载失败:%1不是有效的Win32应用程序”

2024-04-26 06:08:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我在安装python/pyqt/matplotlib应用程序后遇到一个错误,我用cx-freeze冻结了这个应用程序。 我用

python setup.py build

你知道吗设置.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位的),并且我非常确定我已经安装了python3.7x64,我通过

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冻结脚本使用系统平台决定使用什么基,因此它选择

base=Win32GUI

我该怎么办?你知道吗

我注意到python setup.py build用完了cmdshell,无论我如何打开它,它总是32位的;甚至连PowerShell也是32位的。这就是问题所在吗?你知道吗


Tags: pyimportbuildbasesyssetupctypesexe
1条回答
网友
1楼 · 发布于 2024-04-26 06:08:53

在90%的情况下,这种错误是64位和32位混合的结果。假设您在这里的所有测试都是准确的,我猜您使用的dev机器的所有内容都是64位的,但是另一台windows机器要么有一个为32位设计的DLL,要么windows系统本身是32位安装(即使机器本身是64位的)。你知道吗

不要担心sys.platform返回win32,它就是这样做的。你知道吗

在这两台机器上都尝试一下基本的方法:右键单击文件资源管理器中的computer,然后properties——看看windows的安装是32位还是64位。如果另一台机器是32位的,那么你的exe是不兼容的,除非你愿意改变操作系统。你知道吗

另一种解决方案是:在dev机器上安装python 32位版本,使带有它的exe文件几乎可以保证它在32位和64位系统上都能工作。你知道吗

相关问题 更多 >