cx_Freeze:“没有名为'codecs'的模块” Windows 10

16

我正在使用pygame模块制作游戏。 我已按照以下链接的说明进行操作:https://pythonprogramming.net/converting-pygame-executable-cx_freeze/

我解决了一些问题,例如 KeyError KeyError: 'TCL_Library' when I use cx_Freeze 和 AttributeError Attribute Error while using cx_Freeze

已完成setup.py的构建,但是当我运行游戏的exe文件时,它会崩溃并显示“Fatal Python error: Py_Initialize: unable to load the file system codec”。

    Fatal Python error: Py_Initialize: unable to load the file system codec
Traceback (most recent call last):
  File "C:\Users\jinju\AppData\Local\Programs\Python\Python35-32\lib\encodings\__init__.py", line 31, in <module>
ImportError: No module named 'codecs'
我已阅读了之前在Linux内核中回答的问题(cx_Freeze:“No module named 'codecs'”),但我想知道我在Windows 10内核上应该做什么。
我使用通过python主页下载的Python 3.5.3,通过pip自动下载的cx_Freeze-5.1-cp35-cp35m-win32.whl,以及通过pip下载whl的pygame 1.9.3。
setup.py文件
import cx_Freeze, os

executables = [cx_Freeze.Executable("quatris.py")]

os.environ['TCL_LIBRARY'] = r'C:\Users\jinju\AppData\Local\Programs\Python\Python35-32\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\Users\jinju\AppData\Local\Programs\Python\Python35-32\tcl\tk8.6'

cx_Freeze.setup(
    name = "QUATRIS",
    version = '1.0',
    options={"build_exe": {"packages":["pygame"], "include_files":['ab_main.wav', 'ct_main.wav', 'f3_main.wav',
                                                                    'ff_main.wav', 'gta4_soviet.wav',
                                                                    'h3_neverforget.wav', 'h_onefinaleffort.wav',
                                                                    'm_sweden.wav', 'p1_stillalive.wav',
                                                                    'p2_caramiaaddio.wav', 'smb_1-up.wav',
                                                                    'smb_bump.wav', 'smb_coin.wav', 'smb_gameover.wav',
                                                                    'smb_mariodie.wav', 'smb_overworld.wav',
                                                                    'smb_pause.wav', 'tes4o_main.wav',
                                                                    'tes5s_dragonborn.wav', 'tes5s_farhorizons.wav',
                                                                    'tetris.wav', 'tloz_intro.wav', 'tw3wh_main.wav']}},
    executables = executables)

我试图查看init.py文件和codecs.py文件。当我尝试导入codecs时,

module 'codecs' has no attribute 'register'

这个东西出来了。

# Register the search_function in the Python codec registry
codecs.register(search_function)

这是在init.py文件中发生错误的部分。


你的quatris.py运行没有错误,是吧? - Xantium
即使使用了 cx_freeze 5.1.1,我仍然遇到了这个错误。我一直跟踪回溯信息,最终发现是一个特定的模块导致了这个错误。在我的情况下,是 tweepy 模块导致了这个问题。由于我不需要在可执行文件中使用该模块,因此我将其注释掉后就不再遇到该错误了。 - 5nizzard
2个回答

4

我刚刚通过 pip install cx_Freeze --upgrade (v5.1) 安装了cx_Freeze,并且遇到了相同的问题。当我尝试运行 .exe 文件时,它会以相同的错误崩溃,即 No module named 'codecs'。将 import codec 添加到我的 Python 文件顶部没有任何效果。我在 Windows 上使用 Python 3.6.1 并使用 amd64 CPU。 - pheeper
是的,在我发布5.1.1版本之前,你必须从源代码构建! - Anthony Tuininga
4
cx_Freeze 5.1.1 刚刚发布,其中包含了这个修复。 - Anthony Tuininga
我在使用cx_Freeze 5.1.1时遇到了相同的问题。 - Amey P Naik

3
一种简单但不优雅的方法是将其放置于HTML代码中。
if not True:
    import codecs

在你的代码中的某个地方。


你是指在 setup.py 文件内部吗? - Minha Armada Ju
@MinhaArmadaJu 不是在任何特定的Python代码位置。 - Michael Butscher
我将你的代码粘贴到我的main.py代码中并重新构建了游戏,但错误仍然存在。 - Minha Armada Ju
对我来说,我直接在我的主函数顶部导入了编解码器,然后它就可以工作了。 - CodeCollector

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接