From: Robert V. <rob...@ya...> - 2007-05-28 11:03:59
|
Hello Werner, I run on WinXP with matplotlib 0.9.0 python 2.4.3 (enthought edition) wx.VERSION_STRING = 2.6.3.3 I tried your small example to use your setup and your simple_plot but i get the following traceback: Traceback (most recent call last): File "simpletest.py", line 6, in ? File "pylab.pyo", line 1, in ? File "matplotlib\pylab.pyo", line 203, in ? File "matplotlib\axes.pyo", line 16, in ? File "matplotlib\axis.pyo", line 19, in ? File "matplotlib\patches.pyo", line 42, in ? File "matplotlib\patches.pyo", line 79, in Patch File "matplotlib\cbook.pyo", line 352, in dedent AttributeError: 'NoneType' object has no attribute 'splitlines' Did I miss something? Actually I am also trying to understand how to py2exe my own app. Thanx for help. Best Regards Robert Werner F. Bruhin wrote: Hi Giorgio, Had a quick look at pylab based scripts and got an error on backend_tkagg when py2exe it. It looks like one needs to force the backend to be included, I used tkagg but you would have to replace that with wxagg for your script. Attached is a setup.py and from the examples the file simple_plot.py. Werner # -*- coding: iso-8859-1 -*-# from distutils.core import setup import os from os.path import join import shutil import glob import py2exe from py2exe.build_exe import py2exe import sys import matplotlib mpdir, mpfiles = matplotlib.get_py2exe_datafiles() # cleanup dist and build directory first (for new py2exe version) if os.path.exists("dist/prog"): shutil.rmtree("dist/prog") if os.path.exists("dist/lib"): shutil.rmtree("dist/lib") if os.path.exists("build"): shutil.rmtree("build") # # A program using wxPython # The manifest will be inserted as resource into the .exe. This # gives the controls the Windows XP appearance (if run on XP ;-) # manifest_template = ''' <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="5.0.0.0" processorArchitecture="x86" name="%(prog)s" type="win32" /> <description>%(prog)s</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="AsInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly> ''' RT_MANIFEST = 32 # # options for py2exe options = {"py2exe": {"compressed": 1, "optimize": 2, "packages": ["encodings", "pytz.zoneinfo.UTC", "matplotlib.numerix", "matplotlib.backends.backend_tkagg" ], "excludes": ["MySQLdb", ], "dll_excludes": ["wxmsw26uh_vc.dll"] } } zipfile = r"lib\library.zip" class MetaBase: def __init__(self, **kw): self.__dict__.update(kw) self.version = '1.0' self.author = "yourname" self.author_email = "na...@wh..." self.company_name = "" self.copyright = "2003 - 2007 by whoever" self.url = "http://www.whatever.com/" self.download_url = "http://www.whatever.com/en/" self.trademark = "" self.comments = "a comment on the prog" self.name = "the prog name" self.description = "a desc on the prog" wx_emb = MetaBase( script = "simple_plot.py", other_resources = [(RT_MANIFEST, 1, manifest_template % dict(prog="your prog name"))], ## icon_resources = [(1, r"images/some.ico")], dest_base = r"prog\simple_plot") setup( classifiers = ["Copyright:: your name", "Development Status :: 5 Stable", "Intended Audience :: End User", "License :: Shareware", "Operating System :: Microsoft :: Windows 2000", "Operating System :: Microsoft :: Windows XP", "Operating System :: Microsoft :: Windows 9x", "Programming Language :: Python, wxPython", "Topic :: Home Use" "Natural Language :: German", "Natural Language :: French", "Natural Language :: English"], windows = [wx_emb], options = options, zipfile = zipfile, data_files = [("lib\\matplotlibdata", mpfiles), ## matplotlib.get_py2exe_datafiles(), # if you don't use the lib option ] ) #!/usr/bin/env python """ Example: simple line plot. Show how to make and save a simple line plot with labels, title and grid """ from pylab import * t = arange(0.0, 1.0+0.01, 0.01) s = cos(2*2*pi*t) plot(t, s) xlabel('time (s)') ylabel('voltage (mV)') title('About as simple as it gets, folks') grid(True) #savefig('simple_plot.png') savefig('simple_plot') show() ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Matplotlib-users mailing list Mat...@li... https://lists.sourceforge.net/lists/listinfo/matplotlib-users « Return to thread Start a free forum or mailing list archive on Nabble Werner F. Bruhin wrote: > > Hi Archana, > > Archana Ganesan wrote: >> Hi all, >> >> I have a python application that uses matplotlib. I want to compile it >> into an executable. I tried using py2exe but it returned some error >> w.rt matplotlib. Cpuld anyone please help me with this? Is there some >> other way to get it done? > I am using matplotlib (currently 0.90) with wxPython and py2exe > (0.6.6). Attached are some sample files. > > I am on: > # Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit > (Intel)] > # wxPython 2.8.1.1, Boa Constructor 0.5.2 > > And as I am still using wxPython Ansi I renamed > > matplotlib/backends/_wxagg.pyd > > to > > matplotlib/backends/_wxagg not used.pyd > > Hope this helps > Werner > > > # -*- coding: iso-8859-1 -*-# > from distutils.core import setup > import os > from os.path import join > import shutil > > import glob > import py2exe > from py2exe.build_exe import py2exe > import sys > > import matplotlib > mpdir, mpfiles = matplotlib.get_py2exe_datafiles() > > # cleanup dist and build directory first (for new py2exe version) > if os.path.exists("dist/prog"): > shutil.rmtree("dist/prog") > > if os.path.exists("dist/lib"): > shutil.rmtree("dist/lib") > > if os.path.exists("build"): > shutil.rmtree("build") > > > > # > # A program using wxPython > > # The manifest will be inserted as resource into the .exe. This > # gives the controls the Windows XP appearance (if run on XP ;-) > # > manifest_template = ''' > <?xml version="1.0" encoding="UTF-8" standalone="yes"?> > <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> > <assemblyIdentity > version="5.0.0.0" > processorArchitecture="x86" > name="%(prog)s" > type="win32" > /> > <description>%(prog)s</description> > <dependency> > <dependentAssembly> > <assemblyIdentity > type="win32" > name="Microsoft.Windows.Common-Controls" > version="6.0.0.0" > processorArchitecture="X86" > publicKeyToken="6595b64144ccf1df" > language="*" > /> > </dependentAssembly> > </dependency> > <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> > <security> > <requestedPrivileges> > <requestedExecutionLevel > level="AsInvoker" > uiAccess="false"/> > </requestedPrivileges> > </security> > </trustInfo> > </assembly> > ''' > > RT_MANIFEST = 32 > # > > # options for py2exe > options = {"py2exe": {"compressed": 1, > "optimize": 2, > "packages": ["encodings", > ## "kinterbasdb", > "pytz.zoneinfo.UTC", > "matplotlib.numerix", > ## "email", > ## "numpy" > ## "PIL", > ], > "excludes": ["MySQLdb", "Tkconstants", "Tkinter", > "tcl", > "orm.adapters.pgsql", > "orm.adapters.mysql" > ], > "dll_excludes": ["tcl84.dll", "tk84.dll", > "wxmsw26uh_vc.dll"] > } > } > zipfile = r"lib\library.zip" > > class MetaBase: > def __init__(self, **kw): > self.__dict__.update(kw) > self.version = '1.0' > self.author = "yourname" > self.author_email = "na...@wh..." > self.company_name = "" > self.copyright = "2003 - 2007 by whoever" > self.url = "http://www.whatever.com/" > self.download_url = "http://www.whatever.com/en/" > self.trademark = "" > self.comments = "a comment on the prog" > self.name = "the prog name" > self.description = "a desc on the prog" > > wx_emb = MetaBase( > script = "embedding_in_wx4.py", > other_resources = [(RT_MANIFEST, 1, manifest_template % > dict(prog="your prog name"))], > ## icon_resources = [(1, r"images/some.ico")], > dest_base = r"prog\wx_embed") > > setup( > classifiers = ["Copyright:: your name", > "Development Status :: 5 Stable", > "Intended Audience :: End User", > "License :: Shareware", > "Operating System :: Microsoft :: Windows 2000", > "Operating System :: Microsoft :: Windows XP", > "Operating System :: Microsoft :: Windows 9x", > "Programming Language :: Python, wxPython", > "Topic :: Home Use" > "Natural Language :: German", > "Natural Language :: French", > "Natural Language :: English"], > windows = [wx_emb], > #console = [twcb], > options = options, > zipfile = zipfile, > data_files = [("lib\\matplotlibdata", mpfiles), > ## matplotlib.get_py2exe_datafiles(), # if you don't > use the lib option > #### ("prog\\amaradata", amaradata), > #### ("prog\\amaradata\\Schemata", amaraschemata), > #### ("prog\\", python4dll) > ] > ) > > #!/usr/bin/env python > """ > An example of how to use wx or wxagg in an application with a custom > toolbar > """ > > from matplotlib.numerix import arange, sin, pi > > import matplotlib > > # uncomment the following to use wx rather than wxagg > #matplotlib.use('WX') > #from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas > > # comment out the following to use wx rather than wxagg > matplotlib.use('WXAgg') > from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as > FigureCanvas > from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg > > from matplotlib.backends.backend_wx import _load_bitmap > from matplotlib.figure import Figure > from matplotlib.numerix.mlab import rand > > import wx > > class MyNavigationToolbar(NavigationToolbar2WxAgg): > """ > Extend the default wx toolbar with your own event handlers > """ > ON_CUSTOM = wx.NewId() > def __init__(self, canvas, cankill): > NavigationToolbar2WxAgg.__init__(self, canvas) > > # for simplicity I'm going to reuse a bitmap from wx, you'll > # probably want to add your own. > self.AddSimpleTool(self.ON_CUSTOM, _load_bitmap('stock_left.xpm'), > 'Click me', 'Activate custom contol') > self.Bind(wx.EVT_TOOL, self._on_custom, id=self.ON_CUSTOM) > > def _on_custom(self, evt): > # add some text to the axes in a random location in axes (0,1) > # coords) with a random color > > # get the axes > ax = self.canvas.figure.axes[0] > > # generate a random location can color > x,y = tuple(rand(2)) > rgb = tuple(rand(3)) > > # add the text and draw > ax.text(x, y, 'You clicked me', > transform=ax.transAxes, > color=rgb) > self.canvas.draw() > evt.Skip() > > > class CanvasFrame(wx.Frame): > > def __init__(self): > wx.Frame.__init__(self,None,-1, > 'CanvasFrame',size=(550,350)) > > self.SetBackgroundColour(wx.NamedColor("WHITE")) > > self.figure = Figure(figsize=(5,4), dpi=100) > self.axes = self.figure.add_subplot(111) > t = arange(0.0,3.0,0.01) > s = sin(2*pi*t) > > self.axes.plot(t,s) > > self.canvas = FigureCanvas(self, -1, self.figure) > > self.sizer = wx.BoxSizer(wx.VERTICAL) > self.sizer.Add(self.canvas, 1, wx.TOP | wx.LEFT | wx.EXPAND) > # Capture the paint message > self.Bind(wx.EVT_PAINT, self.OnPaint) > > self.toolbar = MyNavigationToolbar(self.canvas, True) > self.toolbar.Realize() > if wx.Platform == '__WXMAC__': > # Mac platform (OSX 10.3, MacPython) does not seem to cope > with > # having a toolbar in a sizer. This work-around gets the > buttons > # back, but at the expense of having the toolbar at the top > self.SetToolBar(self.toolbar) > else: > # On Windows platform, default window size is incorrect, so > set > # toolbar width to figure width. > tw, th = self.toolbar.GetSizeTuple() > fw, fh = self.canvas.GetSizeTuple() > # By adding toolbar in sizer, we are able to put it at the > bottom > # of the frame - so appearance is closer to GTK version. > # As noted above, doesn't work for Mac. > self.toolbar.SetSize(wx.Size(fw, th)) > self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND) > > # update the axes menu on the toolbar > self.toolbar.update() > self.SetSizer(self.sizer) > self.Fit() > > > def OnPaint(self, event): > self.canvas.draw() > event.Skip() > > class App(wx.App): > > def OnInit(self): > 'Create the main window and insert the custom frame' > frame = CanvasFrame() > frame.Show(True) > > return True > > app = App(0) > app.MainLoop() > > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share > your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV Werner F. Bruhin wrote: Hi Giorgio, Had a quick look at pylab based scripts and got an error on backend_tkagg when py2exe it. It looks like one needs to force the backend to be included, I used tkagg but you would have to replace that with wxagg for your script. Attached is a setup.py and from the examples the file simple_plot.py. Werner # -*- coding: iso-8859-1 -*-# from distutils.core import setup import os from os.path import join import shutil import glob import py2exe from py2exe.build_exe import py2exe import sys import matplotlib mpdir, mpfiles = matplotlib.get_py2exe_datafiles() # cleanup dist and build directory first (for new py2exe version) if os.path.exists("dist/prog"): shutil.rmtree("dist/prog") if os.path.exists("dist/lib"): shutil.rmtree("dist/lib") if os.path.exists("build"): shutil.rmtree("build") # # A program using wxPython # The manifest will be inserted as resource into the .exe. This # gives the controls the Windows XP appearance (if run on XP ;-) # manifest_template = ''' <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="5.0.0.0" processorArchitecture="x86" name="%(prog)s" type="win32" /> <description>%(prog)s</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="AsInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly> ''' RT_MANIFEST = 32 # # options for py2exe options = {"py2exe": {"compressed": 1, "optimize": 2, "packages": ["encodings", "pytz.zoneinfo.UTC", "matplotlib.numerix", "matplotlib.backends.backend_tkagg" ], "excludes": ["MySQLdb", ], "dll_excludes": ["wxmsw26uh_vc.dll"] } } zipfile = r"lib\library.zip" class MetaBase: def __init__(self, **kw): self.__dict__.update(kw) self.version = '1.0' self.author = "yourname" self.author_email = "na...@wh..." self.company_name = "" self.copyright = "2003 - 2007 by whoever" self.url = "http://www.whatever.com/" self.download_url = "http://www.whatever.com/en/" self.trademark = "" self.comments = "a comment on the prog" self.name = "the prog name" self.description = "a desc on the prog" wx_emb = MetaBase( script = "simple_plot.py", other_resources = [(RT_MANIFEST, 1, manifest_template % dict(prog="your prog name"))], ## icon_resources = [(1, r"images/some.ico")], dest_base = r"prog\simple_plot") setup( classifiers = ["Copyright:: your name", "Development Status :: 5 Stable", "Intended Audience :: End User", "License :: Shareware", "Operating System :: Microsoft :: Windows 2000", "Operating System :: Microsoft :: Windows XP", "Operating System :: Microsoft :: Windows 9x", "Programming Language :: Python, wxPython", "Topic :: Home Use" "Natural Language :: German", "Natural Language :: French", "Natural Language :: English"], windows = [wx_emb], options = options, zipfile = zipfile, data_files = [("lib\\matplotlibdata", mpfiles), ## matplotlib.get_py2exe_datafiles(), # if you don't use the lib option ] ) #!/usr/bin/env python """ Example: simple line plot. Show how to make and save a simple line plot with labels, title and grid """ from pylab import * t = arange(0.0, 1.0+0.01, 0.01) s = cos(2*2*pi*t) plot(t, s) xlabel('time (s)') ylabel('voltage (mV)') title('About as simple as it gets, folks') grid(True) #savefig('simple_plot.png') savefig('simple_plot') show() ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Matplotlib-users mailing list Mat...@li... https://lists.sourceforge.net/lists/listinfo/matplotlib-users if( self == top ) { Nabble.writeReturnToLink( 'Return to thread' ); } else if( Nabble.prev ) Nabble.writeReturnToLink(Nabble.prev); --------------------------------- Ne gardez plus qu'une seule adresse mail ! Copiez vos mails vers Yahoo! Mail |