使用 setuptools/distutils 构建 PyInstaller exe 时 ensure_local_distutils 内的 AssertionError

AssertionError inside of ensure_local_distutils when building a PyInstaller exe using setuptools/distutils

我正在尝试使用 PyInstaller 将一些 Python 代码转换为 .exe。我的代码使用了 distutils,它在过去已经让我有些头疼,因为它似乎重复了 setuptools 的功能,并且与它的交互很奇怪。它例如需要 才能正常工作,这对我来说似乎很不自然。

我需要在我的项目中使用这两个包。我按顺序 import setuptools; import distutils 导入了两个包,因为另一个顺序引发了一个已经令人担忧的警告。

我的脚本运行正常,但在我将它变成一个 exe 文件后,我在 setuptools 的可疑 _distutils_hack 子模块中得到了回溯。 是的,它只是打印了一个没有上下文的文件名。

Traceback (most recent call last):
  <18 lines omitted>
  File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
  File "_distutils_hack\override.py", line 71, in <module>
  File "_distutils_hack\__init__.py", line 71, in do_override
  File "_distutils_hack\__init__.py", line 59, in ensure_local_distutils
AssertionError: C:\Users\<omitted>\AppData\Local\Temp\_MEI294562\distutils\core.pyc 

我正在使用

显然,setuptools 已在 PyPI 上列出,因此可以升级,但 distutils 未在 PyPI 上列出,因此无法升级(该版本与 Python 捆绑在一起)。

我发现的解决方法是降级到

pip install --upgrade setuptools==59.8.0

reported this issue 到该项目并确认在 setuptools==60.0.0 中引入了错误。当我发现更多信息或它得到修复时,我会更新这个答案