我在安装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位的。这就是问题所在吗?你知道吗
在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位系统上都能工作。你知道吗
相关问题 更多 >
编程相关推荐