首页 > 解决方案 > cx-Freeze 无法构建“LookupError:未知编码”

问题描述

我在 Windows 10 64 位上有 Python 3.8。我在安装 cx-Freeze 时遇到了一些麻烦,不得不安装“cx_Freeze-6.0-cp38-cp38-win32.whl”,因为它是唯一一个有效的。

我正在尝试将使用 wxPyhton 生成简单 GUI 的脚本转换为可执行文件。

运行“steup.py build”时出现以下错误

running build
running build_exe
.....
copying C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\VCRUNTIME140.dll -> build\exe.win32-3.8\VCRUNTIME140.dll
Traceback (most recent call last):
  File "setup.py", line 21, in <module>
    setup(name='editor',
  File "C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\lib\site-packages\cx_Freeze\dist.py", line 348, in setup
    distutils.core.setup(**attrs)
  File "C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\lib\distutils\core.py", line 148, in setup
    dist.run_commands()
  File "C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\lib\distutils\dist.py", line 966, in run_commands
    self.run_command(cmd)
  File "C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\lib\distutils\dist.py", line 985, in run_command
    cmd_obj.run()
  File "C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\lib\distutils\command\build.py", line 135, in run
    self.run_command(cmd_name)
  File "C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\lib\distutils\cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\lib\distutils\dist.py", line 985, in run_command
    cmd_obj.run()
  File "C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\lib\site-packages\cx_Freeze\dist.py", line 219, in run
    freezer.Freeze()
  File "C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\lib\site-packages\cx_Freeze\freezer.py", line 617, in Freeze
    self._FreezeExecutable(executable)
  File "C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\lib\site-packages\cx_Freeze\freezer.py", line 208, in _FreezeExecutable
    self._AddVersionResource(exe)
  File "C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\lib\site-packages\cx_Freeze\freezer.py", line 143, in _AddVersionResource
    stamp(fileName, versionInfo)
  File "C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\lib\site-packages\win32\lib\win32verstamp.py", line 157, in stamp
    vs = VS_VERSION_INFO(vmaj, vmin, vsub, vbuild, sdata, vdata, is_debug, is_dll)
  File "C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\lib\site-packages\win32\lib\win32verstamp.py", line 103, in VS_VERSION_INFO
    result = result + nullterm('VS_VERSION_INFO')
  File "C:\Users\ptanas\AppData\Local\Programs\Python\Python38-32\lib\site-packages\win32\lib\win32verstamp.py", line 50, in nullterm
    return (str(s) + '\0').encode('unicode-internal')
LookupError: unknown encoding: unicode-internal

我不知道为什么会出现这个错误。

设置.py:

import os
import sys

from cx_Freeze import Executable, setup

# Dependencies are automatically detected, but it might need
# fine tuning.
buildOptions = dict(
    packages = [],
    excludes = [],
    include_files=[]
)

base = 'Win32GUI' if sys.platform=='win32' else None

executables = [
    Executable('test.py', base=base)
]

setup(name='editor',
      version = '1.0',
      description = '',
      options = dict(build_exe = buildOptions),
      executables = executables)

标签: pythoncx-freeze

解决方案


已修复:https ://github.com/mhammond/pywin32/commit/74f9d8b8b549ff0d547ff600eaca1f25c79b4432 。

升级pywin32:

pip install -U pywin32

推荐阅读