I am trying to use py2exe-0.6.9.win32 to complete an application that I wrote in Python2.6.5 using the following object libraries with the corresponding download file names:
Matplotlib-0.99.3.win32
numpy-1.4.1-win32
SciPy-0.8.0b1-win32
wxPython2.8-win32-unicode-2.8.11.0
I get error messages when I try to run the resulting .exe file. At the moment, the error message is related to numpy, although before that I was getting something related to matplot lib data files that are not loading and thus block the launch of my exe file.
Instead of posting a million code and all error messages, I am posting a more general question: Can someone show me some instructions so that all of these object libraries and versions play well together using py2exe to create an exe work file?
I have read things that come up with Google search queries on this topic, but it looks like it's a wild goose stalker in which everyone uses different versions of different things. I can change some versions of some of these object libraries if that matters, but I already wrote 5,000 lines of code in this signal processing application, and I would prefer not to rewrite all of this if possible.
EDIT:
Here is a simplified version of my code in the GUIdiagnostics.py file that I did to test the ability of my py2exe script to import all the libraries I need in my real application:
import time import wxversion import wx import csv import os import pylab as p from scipy import stats import math from matplotlib import * from numpy import * from pylab import * import scipy.signal as signal import scipy.optimize import Tkinter ID_EXIT = 130 class MainWindow(wx.Frame): def __init__(self, parent,id,title): wx.Frame.__init__(self,parent,wx.ID_ANY,title, size = (500,500), style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
Here is the code for setup.py, which is the file containing my py2exe code:
from distutils.core import setup import py2exe # Remove the build folder, a bit slower but ensures that build contains the latest import shutil shutil.rmtree("build", ignore_errors=True) # my setup.py is based on one generated with gui2exe, so data_files is done a bit differently data_files = [] includes = [] excludes = ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'pywin.debugger', 'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl', 'Tkconstants', 'Tkinter', 'pydoc', 'doctest', 'test', 'sqlite3' ] packages = ['pytz'] dll_excludes = ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll', 'tcl84.dll', 'tk84.dll'] icon_resources = [] bitmap_resources = [] other_resources = [] # add the mpl mpl-data folder and rc file import matplotlib as mpl data_files += mpl.get_py2exe_datafiles() setup( windows=['GUIdiagnostics.py'], # compressed and optimize reduce the size options = {"py2exe": {"compressed": 2, "optimize": 2, "includes": includes, "excludes": excludes, "packages": packages, "dll_excludes": dll_excludes, # using 2 to reduce number of files in dist folder # using 1 is not recommended as it often does not work "bundle_files": 2, "dist_dir": 'dist', "xref": False, "skip_archive": False, "ascii": False, "custom_boot_script": '', } }, # using zipfile to reduce number of files in dist zipfile = r'lib\library.zip', data_files=data_files )
I ran this code by entering the following line into the windows command line interface (cmd.exe) according to the following link:
setup.py py2exe
Then Py2exe starts, but when I try to run the resulting exe file, it creates a log file containing the following message:
Traceback (most recent call last): File "setup.py", line 6, in <module> File "zipextimporter.pyo", line 82, in load_module File "pylab.pyo", line 1, in <module> File "zipextimporter.pyo", line 82, in load_module File "matplotlib\pylab.pyo", line 206, in <module> File "zipextimporter.pyo", line 82, in load_module File "matplotlib\mpl.pyo", line 3, in <module> File "zipextimporter.pyo", line 82, in load_module File "matplotlib\axes.pyo", line 14, in <module> File "zipextimporter.pyo", line 82, in load_module File "matplotlib\collections.pyo", line 21, in <module> File "zipextimporter.pyo", line 82, in load_module File "matplotlib\backend_bases.pyo", line 32, in <module> File "zipextimporter.pyo", line 82, in load_module File "matplotlib\widgets.pyo", line 12, in <module> File "zipextimporter.pyo", line 82, in load_module File "matplotlib\mlab.pyo", line 388, in <module> TypeError: unsupported operand type(s) for %: 'NoneType' and 'dict'
Can someone show me how to edit setup.py so py2exe can create numpy, scipy, matplotlib executable, etc.?
SECOND EDIT:
OK Today I tried the RC advice again, that I have a fresh mind for this, and I got the same error, but I include it below. Here is the code for the cxsetup.py file that I created after the template: http://cx-freeze.sourceforge.net/cx_Freeze.html .
from cx_Freeze import setup, Executable setup( name = "Potark", version = "0.1", description = "My application.", executables = [Executable("Potark-ICG.py")])
Unfortunately, running it on the command line (cmd.exe) using the command:
python cxsetup.py build
generates the following error on the command line:
ImportError: No module named cx_Freeze
The directory on the command line is the directory for my application, which is located in a subfolder of the desktop. This is different from the directory for a python application, but I assume cmd.exe can figure it out, because python can figure it out. I am wrong? As a test, I added the following line of code to the first line of cxsetup.py:
import matplotlib
But this led to an almost identical error:
ImportError: No module named matplotlib
I tried to keep this thread whole and short, but it gets long. Can anyone help me with this? I would really like all the work of switching to cx_freeze to be found only to find that it cannot work with numpy, matplotlib, scipy, etc.