【问题标题】:Creating cx_Freeze exe with Numpy for Python使用 Numpy for Python 创建 cx_Freeze exe
【发布时间】:2012-04-04 05:43:14
【问题描述】:

我正在尝试使用 cx_Freeze 创建一个基本的 exe。它适用于没有 numpy 但我无法使用 numpy 正确制作的 .py 程序。

*关于如何解决这个问题的任何想法?我需要在 setup.py 中包含什么内容吗?

当我运行 exe 时,它​​说:

           c:\Python32\Scripts\dist>Assignment4_5.exe
           Traceback (most recent call last):
     File "C:\Python32\lib\site-packages\cx_Freeze\initscripts\Console3.py", line 2
     7, in <module>
     exec(code, m.__dict__)
     File "c:\Python32\Assignment4_5.py", line 6, in <module>
     import numpy as np
     File "C:\Python32\lib\site-packages\numpy\__init__.py", line 137, in <module>
     from . import add_newdocs
     File "C:\Python32\lib\site-packages\numpy\add_newdocs.py", line 9, in <module>

     from numpy.lib import add_newdoc
     File "C:\Python32\lib\site-packages\numpy\lib\__init__.py", line 17, in <modul
     e>
    from .npyio import *
    File "C:\Python32\lib\site-packages\numpy\lib\npyio.py", line 6, in <module>
    from . import format
    ImportError: cannot import name format

   c:\Python32\Scripts\dist>

Setup.py:

   from cx_Freeze import setup, Executable

   includeDependencies = []

   setup(
        name = "Assignment4_5PythonExe",
        version = "0.1",
        description = "Sort Methods",
        executables = [Executable("Assignment4_5.py")]
        )

【问题讨论】:

  • 尝试使用 pyinstaller。它将处理 numpy、matplotlib 等库,而头痛要少得多,i.m.o.
  • @JoeKington:但是 PyInstaller 无法与 c:\Python32 一起使用... @TMan:看起来它无法复制模块 numpy.lib.format。我会看看为什么会这样。
  • @ThomasK - 好点。我错过了他正在使用python3。
  • 我希望我有 python 3,然后 py2exe 会解决我的问题...幸运的是我的问题坚持使用 2...

标签: python numpy cx-freeze


【解决方案1】:

这是 cx_Freeze 中的一个错误 - 它不会自动检测到它应该复制模块 numpy.lib.format。它已经在development version 中修复了,所以如果你有能力尝试它,它应该可以工作。

否则,您需要指定numpy.lib.format 需要包含在您的setup.py 中。该行将如下所示:

options = {"build_exe": {"packages": ["numpy.lib.format"]}},

另见the documentation。

【讨论】:

  • 嘿,我将如何使用此添加编辑 cxfreeze main.py?这不会使位于 Python36/Scripts 中的标准 cxfreeze 脚本也能够转换 numpy 脚本吗?
【解决方案2】:

Numpy 似乎对 cx_Freeze 有点困惑,因此您需要明确声明它。如docs中所引用

这是您的解决方案:

   from cx_Freeze import setup, Executable

   build_exe_options = {"packages": ["numpy"]}

   setup(
        name = "Assignment4_5PythonExe",
        version = "0.1",
        description = "Sort Methods",
        options = {"build_exe": build_exe_options},
        executables = [Executable("Assignment4_5.py")]
        )

【讨论】:

  • 我可以确认这是有效的@blackmore5。请注意,我的构建选项为: build_exe_options = {"include_files": ["tcl86t.dll", "tk86t.dll"], "packages": ["numpy"]}
【解决方案3】:

我最近在使用 cx_freeze 6.1 和 Python 3.5.4 时遇到了这个问题。为了解决我的运行时问题,我不得不在运行时将 numpy lib 路径添加到系统路径中。如果可以帮助任何人,这是相关代码sn-p:

if __name__ == '__main__':
# The frozen app needs the numpy path added to it's file.
try:
    this_file = __file__
except NameError:
    this_file = sys.argv[0]
    sys.path.insert(0, str(Path(this_file).absolute().parent / "lib" / "numpy"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多