可以在Vista上构建exe并在XP上部署吗,使用py2exe?

8 投票
2 回答
1156 浏览
提问于 2025-04-16 09:38

我在Windows Vista上用Python写了个程序,但我想把它放到Windows XP上运行。请问我需要在Windows XP上重新构建一个版本吗?还是说可以做一个能在这两个系统上都能用的版本?

补充说明(补充说明2 - 很简单的程序也不能运行):

我的设置是:

from distutils.core import setup
import py2exe

setup(console=['orderer.py'])

我用依赖项查看工具检查了一下,发现依赖项是:

msvcr90.dll
kernel32.dll
  +ntdll.dll

几乎解决了:

我发现安装这个链接里的东西:http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en可以解决问题。但是我之前尝试手动提供msvrc90.dll时没有成功,有没有办法自动分发这个文件?还是说我必须把这个安装文件给他。

最后也是最主要的问题

现在我遇到的问题是msvcrt.dll。Windows XP上出现的提示是:

在动态链接库msvcrt.dll中找不到过程入口点wcsscpy_s

在Vista上我的版本是7.0.6001.18000

但在XP上是7.0.2600.5512

有没有办法解决这个问题?

看起来我漏掉了一些dll文件……真是个小错误:

$ grep -lir msvcrt.dll .
./buildout
./buildtest.py
./dist/ACTIVEDS.dll
./dist/adsldpc.dll
./dist/ATL.DLL
./dist/credui.dll
./dist/DSOUND.dll
./dist/MAPI32.dll
./dist/PROPSYS.dll
./dist/WLDAP32.dll

现在可以运行了!

2 个回答

2

如果你的Vista系统上装的是32位的Python,并且你用py2exe把程序打包成exe文件,那么这个exe文件在XP系统上也应该能运行。

你遇到什么问题了吗?如果有的话,具体是什么问题呢?

3

在你用py2exe生成的可执行文件旁边,创建一个名为“Microsoft.VC90.CRT.manifest”的文件,并把下面的内容放进去,同时确保msvcr90.dll、msvcp90.dll和msvcm90.dll这几个文件也在同一个地方:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <noInheritable/>
    <assemblyIdentity
        type="win32"
        name="Microsoft.VC90.CRT"
        version="9.0.21022.8"
        processorArchitecture="x86"
        publicKeyToken="1fc8b3b9a1e18e3b"
    />
    <file name="msvcr90.dll" />
    <file name="msvcp90.dll" />
    <file name="msvcm90.dll" />
</assembly>

撰写回答