使用 cx_Freeze 构建可执行文件时出错:IndexError: tuple index out of range

Posted

技术标签:

【中文标题】使用 cx_Freeze 构建可执行文件时出错:IndexError: tuple index out of range【英文标题】:Error building executable with cx_Freeze: IndexError: tuple index out of range 【发布时间】:2016-12-19 00:16:48 【问题描述】:

背景

我制作了一个程序,我正试图使用​​ CX_Freeze 将其转换为可执行文件。 setup.py 文件与我正在使用的所有文件位于同一目录中。除了 TKinter 和 OS,我不使用任何额外的库。

当我通过 PyCharm>Run

运行该程序时,它可以正常运行

版本号

cx_Freeze 版本: - 5.0 cx_Freeze .whl: - cx_Freeze-5.0-cp36-cp36m-win_amd64.whl python 版本: - 3.6.0b4 pycharm 版本: - 2016.3.1

这是我的setup.py 文件

import cx_Freeze
import sys
from cx_Freeze import setup, Executable


base = None

if sys.platform == 'win32':
    base = "Win32GUI"

cx_Freeze.setup(
    name = "FileOrganizer-Client",
    options = "build_exe": "packages":["tkinter","os"],"include_files":["icon2.ico"],
    version = "0.01",
    description = "File Organizer",
    executables = [cx_Freeze.Executable("alpha_GUI.py", base=base, icon="icon2.ico")]
)

这是我在目录中运行“python setup.py build”时遇到的错误

C:\Users\Jeremy\PycharmProjects\cleanup>C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\python setup.py build running build running build_exe
Traceback (most recent call last):   File "setup.py", line 18, in
<module>
    executables = [cx_Freeze.Executable("alpha_GUI.py", base=base, icon="icon2.ico")]

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\dist.py",
line 349, in setup
    distutils.core.setup(**attrs)

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\distutils\core.py",
line 148, in setup
    dist.run_commands()

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\distutils\dist.py",
line 955, in run_commands
    self.run_command(cmd)

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\distutils\dist.py",
line 974, in run_command
    cmd_obj.run()

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\distutils\command\build.py",
line 135, in run
    self.run_command(cmd_name)

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\distutils\cmd.py",
line 313, in run_command
    self.distribution.run_command(command)

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\distutils\dist.py",
line 974, in run_command
    cmd_obj.run()

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\dist.py",
line 219, in run
    freezer.Freeze()

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\freezer.py",
line 621, in Freeze
    self.finder = self._GetModuleFinder()

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\freezer.py",
line 333, in _GetModuleFinder
    self.path, self.replacePaths)

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\finder.py",
line 150, in __init__
    self._AddBaseModules()

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\finder.py",
line 161, in _AddBaseModules
    self.IncludeModule("traceback")

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\finder.py",
line 651, in IncludeModule
    namespace = namespace)

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\finder.py",
line 310, in _ImportModule
    deferredImports, namespace = namespace)

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\finder.py",
line 403, in _InternalImportModule
    parentModule, namespace)

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\finder.py",
line 474, in _LoadModule
    self._ScanCode(module.code, module, deferredImports)

  File
"C:\Users\Jeremy\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\finder.py",
line 562, in _ScanCode
    arguments.append(co.co_consts[opArg])

IndexError: tuple index out of range

我对这些都不是很熟练或熟悉,所以我希望我没有遗漏任何内容。如果需要更多信息,请告诉我。

【问题讨论】:

【参考方案1】:

这已作为a bug in cx_freeze 提交,Python 3.6 对代码对象进行了一些更改(最明显的是PEP 523),因此它可能在依赖它们的应用程序中引入了某些错误。

cx_freeze 上跟踪问题,并记住在使用新发布的 Python 版本时可能会弹出某些错误。


顺便说一句,由于您导入cx_Freeze 并通过那里访问setupExecutable,因此不需要:

from cx_Freeze import setup, Executable

线。您没有使用这些名称。

【讨论】:

非常感谢,就是这样!使用 Python34 工作。我通常会尝试下载任何语言的最新版本,这样我就不必尽快更新,但我现在可以看到这并不总是一件好事。我已经吸取了教训。 :) @JeremyWeisener 你下载了 Python 3.6 的第二个候选版本,而不是 final 一个!不管怎样,是的,你需要小心(顺便说一句,很确定 Python 3.5 也可以在没有问题的情况下工作。 啊,这是我唯一看到的。 =X 我已经安装了 python 3.4,所以我选择使用它。这是非常基本的代码。

以上是关于使用 cx_Freeze 构建可执行文件时出错:IndexError: tuple index out of range的主要内容,如果未能解决你的问题,请参考以下文章

使用 cx_freeze 将 .py 转换为可执行文件时出错

打开 cx_freeze 构建的 exe 文件时出错

使用 cx_freez 构建 exe 时出错

cx_freeze 无法构建 numpy 可执行文件

cx_Freeze 可执行文件在使用 multiprocessing 和 freeze_support 时运行多个任务

使用 cx_freeze 4.3.1 冻结 h5py 2.4 时出错