Py2exe MSVCR90.DLL运行时错误

1 投票
1 回答
1613 浏览
提问于 2025-04-18 16:36

我正在尝试把一个Python脚本转换成Windows的exe文件。我按照py2exe的教程操作,还查看了一些和py2exe一起安装的示例,创建了一个setup.py文件,把合适的VC动态链接库(dll)添加到系统路径中。

from distutils.core import setup
import py2exe
import sys

sys.path.append("C:\\My_VC_dlls")

然后把它们复制到dist文件夹里。

from glob import glob
data_files = [("Microsoft.VC90.CRT", glob(r'C:\My_VC_dlls\*.*'))]

接着给setup传递一些选项。

setup(
   options = {"py2exe": {"compressed": 1, "optimize": 2,
                         "ascii": 1, "bundle_files": 1}},
   zipfile = None,
   data_files=data_files,
   console = ['my_python.py']
)

我运行setup.py py2exe,它就生成了可执行文件,而且运行得很好。

有人问我怎么让这个exe看起来更像一个Windows程序,所以我正在尝试使用py2exe自带的单文件/图形界面的示例,它会实例化一个类:Target。

class Target:
    def__ Blah Blah Blah

还有一个清单模板。

manifest_templete = '''
...

然后

test_wx = Target(
     description = "....
     .....

基本上是相同的设置选项,不过需要:

setup(
   options...
   ....
   windows = [test_wx]

对脚本名称等做适当的修改(比如test_wx.py改成my_python.py)。

这样它就能生成exe文件了,但当我启动它时,出现了“这个程序无法启动,因为缺少MSVCR90.dll”的错误。

我的问题是,当我告诉py2exe这是一个控制台应用时,生成的exe知道去dist/MICROSOFT.VC90.CRT/找dll,但当我告诉py2exe这是一个Windows应用时,生成的exe却不知道去哪里找。简单来说,我该怎么解决这个问题?我怎么把dll的位置嵌入到生成的exe里?

如果这个问题很简单,我先说声抱歉。我对Python和Windows编程完全是个新手。

1 个回答

1

你有没有试过在你的应用程序里调用 sys.path.append("dist/MICROSOFT.VC90.../") 呢?(不是在 setup.py 里)

另外,把 vc90 的 dll 文件放在你的主程序旁边,而不是放在一个子文件夹里,这样怎么样?

撰写回答