Creating cx_Freeze exe with Numpy for Python

落花浮王杯 提交于 2019-11-26 09:52:22

问题


Im trying to create a basic exe using cx_Freeze. It works for .py programs that don\'t have numpy but I can\'t get one made correctly with numpy.

*Any ideas on how to fix this? is there something i need to include in my setup.py?

When I go to run the exe it says:

           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\")]
        )

回答1:


This is a bug in cx_Freeze - it doesn't automatically detect that it should copy the module numpy.lib.format. It's already fixed in the development version, so if you're in a position to try that, it should work.

Otherwise, you'll need to specify that numpy.lib.format needs to be included in your setup.py. The line will look something like this:

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

See also the documentation.




回答2:


Numpy seems to be a little confusing to cx_Freeze so you need to declare it explicitly. As referenced in the docs

Here is your solution:

   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")]
        )


来源:https://stackoverflow.com/questions/10005533/creating-cx-freeze-exe-with-numpy-for-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!