短问题
在构建pyinstaller可执行文件时,是否有任何方式来控制/保证架构(32位vs 64位)?
背景
我从py2exe迁移到pyinstaller,因为缺少64位支持,还有一大堆小事情,我很难过。所以在这个说法上,我宁愿不回去。我已经开发了两个使用Python 2.7 64位的应用程序,并在运行32位机器时遇到性能问题。
第一个是简单的wxPython GUI(版本2.9),并连接到Windows驱动程序的Windows DLL文件。这个似乎很“安全”地运行为32位,因为没有只有64位的模块。但是,当运行在32位Windows XP上的这个应用程序在与USB设备通话时出现了可怕的性能问题。
第二个应用程序是更大的,我没有尝试构建和运行,因为担心架构问题。这个应用程序在其中使用了64位模块(psycopg2一个)。如果不可能作为32位可执行文件运行,我想远离尝试构建它。
当前的想法
我觉得这是可能的(如果模块有32位支持)通过运行build.py与Python强制在32位模式。这是否有意义?
更新
我正在建设的第一个程序有几个突破。事实证明,性能问题仅仅是基于两台机器的速度。我的开发机器有足够的权力轮询USB设备足够快,而且测试平台(Windows XP)没有那么慢。
我通过修改我调查USB端口的方式来解决这个问题。现在这是固定的,我可以在两个系统上运行exe。尝试将可执行文件构建为单个文件时出现了一个新问题。当运行pyinstaller的Build.py时,它会拖动应用程序运行所需的所有DLL。这似乎起初很好,但是当我尝试运行我在Windows 7 64bit上构建的单独exe时,它不会在Windows XP上运行,因为USB加密狗的DLL未被识别为有效的DLL。
为了让单个exe在两个系统上运行,我首先尝试从.spec文件中删除该DLL(这似乎是一个python脚本)。这很方便,因为我可以使用普通的python list修饰符修改build命令之前的include列表。我的希望是,如果在exe的临时目录中找不到DLL,它将在系统PATH上找到它。虽然这种方法可能有效,但我无法让它运行,而不会抛出很多错误。
我的第二个尝试是在Windows XP机器上构建应用程序(留下DLL嵌入),希望Win XP DLL可以在Windows 7中运行。此配置工作正常;但是,我强烈认为这不是最好的解决方案,因为它仅仅依赖于在较新的操作系统上运行的较旧的DLL。