7

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")]
        )
4
  • 1
    Try pyinstaller instead. It will handle libraries like numpy, matplotlib, etc with far less headache, i.m.o. Commented Apr 4, 2012 at 12:54
  • 2
    @JoeKington: But PyInstaller won't work with c:\Python32... @TMan: it looks like it's failing to copy the module numpy.lib.format. I'll look at why that is. Commented Apr 4, 2012 at 17:58
  • @ThomasK - Good point. I missed that he was using python3. Commented Apr 4, 2012 at 18:13
  • I wish I had python 3, then py2exe would solve my problem... Fortunately stuck with 2 for my problem... Commented Aug 22, 2016 at 10:02

3 Answers 3

5

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Hey, how would I edit the cxfreeze main.py with this addition? wouldn't that enable the standard cxfreeze script located in Python36/Scripts to convert numpy scripts also?
5

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

1 Comment

I can confirm this works @blackmore5. Note that my build options reads: build_exe_options = {"include_files": ["tcl86t.dll", "tk86t.dll"], "packages": ["numpy"]}
0

I recently encountered this issue using cx_freeze 6.1 and Python 3.5.4. In order to solve my runtime issues, I had to add the numpy lib path to the system paths at runtime. Here is the relevant code snippet if it can help anyone:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.