使用py2exe后编译的Python脚本返回WindowsError: [错误3]

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

我最近一直在写一个游戏,终于完成了。不过因为这个游戏是为课堂准备的,而我用了一些老师不打算安装的库,所以我需要做一个独立的可执行文件,这样就不需要依赖Python和游戏的其他库。我用py2exe打包,结果成功了,但运行这个exe文件时却出现了错误:

Traceback (most recent call last):
  File "main.pyw", line 1, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "libs\__init__.pyo", line 3, in <module>
WindowsError: [Error 3] The system cannot find the path specified: 'C:\\Users\\matt\\workspace\\COS125\\src\\dist\\includes.zip\\libs/*.*'

我大概找到了错误的原因。很可能是因为我为每个包安装的自动导入器。在我的包的init.py文件里,我用了一段代码,这样简单的“from libs import *”就能导入lib包里的所有文件。这意味着每个文件会像我逐个写“from libs.module import *”那样被加载。

这个init文件里的代码如下:

import os, sys
path = os.path.dirname(__file__)
dirList = os.listdir(path)
for mod in dirList:
    ext = os.path.splitext(mod)
    mod = mod[:-len(ext[1])]
    if (mod not in dir() and 
        mod != "__init__" and
        mod != "" and
        mod != "._"):
        exec("from " + mod + " import *")

我想问的是,有没有人知道怎么做才能在编译后不出现这个错误?

1 个回答

0

我记得几年前我遇到过类似的问题,我是通过去掉发行版中的压缩文件来解决的。

在使用py2exe的设置时,可以试着把zipfile设置为None,或者关闭压缩和打包的选项。

需要注意的是,制作一个可以在所有Windows操作系统上运行的exe文件是非常麻烦的。我在py2exe的讨论组中得到了很多有用的反馈,具体可以在这里这里查看。

撰写回答