473,396 Members | 1,775 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,396 software developers and data experts.

pyinstall and matplotlib

Has anybody been able to create an exe of their python applications
involving matplotlib using pyinstall (ver 1.3)? I am getting a:

RuntimeError: Could not find the matplotlib data files

when I attempt to run the exe created.

In searching the web, it appears this is an issue when others tried to
use py2exe as well. Unfortunately, the few hits I saw doesn't include
enough details to inspire me as to what I should be doing in my
pyinstall .spec file.

Does anybody has an example or information about this?

Thanks,
Feb 9 '08 #1
4 9638
On Feb 9, 2:53 pm, John Henry <john106he...@hotmail.comwrote:
Has anybody been able to create an exe of their python applications
involving matplotlib using pyinstall (ver 1.3)? I am getting a:

RuntimeError: Could not find the matplotlib data files

when I attempt to run the exe created.

In searching the web, it appears this is an issue when others tried to
use py2exe as well. Unfortunately, the few hits I saw doesn't include
enough details to inspire me as to what I should be doing in my
pyinstall .spec file.

Does anybody has an example or information about this?

Thanks,
Well, looks like nobody has an answer to this question.

How'bout py2exe or other ways of creating exe files out of matplotlib
projects? Has anybody been able to do that? (I am cross-posting
these messages to the matploblib mailing list).
Feb 13 '08 #2
In article
<31**********************************@l16g2000hsh. googlegroups.com>,
John Henry <jo**********@hotmail.comwrote:
On Feb 9, 2:53 pm, John Henry <john106he...@hotmail.comwrote:
Has anybody been able to create an exe of their python applications
involving matplotlib using pyinstall (ver 1.3)? I am getting a:

RuntimeError: Could not find the matplotlib data files

when I attempt to run the exe created.

In searching the web, it appears this is an issue when others tried to
use py2exe as well. Unfortunately, the few hits I saw doesn't include
enough details to inspire me as to what I should be doing in my
pyinstall .spec file.

Does anybody has an example or information about this?

Thanks,

Well, looks like nobody has an answer to this question.

How'bout py2exe or other ways of creating exe files out of matplotlib
projects? Has anybody been able to do that? (I am cross-posting
these messages to the matploblib mailing list).
For py2exe I have appended a setup script I use to bundle an application
that includes matplotlib. I am no Windows expert and there are probably
better ways to do it, but it does work. I have made no attempt to strip
out extra stuff.

(As for pyinstaller:a year or so ago I tried to use it to make a bundled
*unix* version of my app. If that had worked I'd have considered trying
to use it for Windows as well. But after a lot of experimenting I was
never able to get anything even close to functional. Maybe it's better
now.)

-- Russell

from distutils.core import setup
import os
import sys
import matplotlib
import py2exe

# The following code is necessary for py2exe to find win32com.shell.
# Solution from
<http://starship.python.net/crew/theller/moin.cgi/WinShell>
import win32com
import py2exe.mf as modulefinder
for pth in win32com.__path__[1:]:
modulefinder.AddPackagePath("win32com", pth)
for extra in ["win32com.shell"]:
__import__(extra)
m = sys.modules[extra]
for pth in m.__path__[1:]:
modulefinder.AddPackagePath(extra, pth)

tuiRoot = os.path.dirname(os.path.dirname(os.path.abspath(__ file__)))
roRoot = os.path.join(tuiRoot, "ROPackage")
sys.path = [tuiRoot, roRoot] + sys.path
import TUI.Version
mainProg = os.path.join(tuiRoot, "runtui.py")

NDataFilesToPrint = 0 # number of data files to print, per directory

def addDataFiles(dataFiles, fromDir, toSubDir=None,
inclHiddenDirs=False):
"""Find data files and format data for the data_files argument of
setup.

In/Out:
- dataFiles: a list to which is appended zero or more of these
elements:
[subDir, list of paths to resource files]

Inputs:
- fromDir: path to root directory of existing resource files
- toSubDir: relative path to resources in package;
if omitted then the final dir of fromDir is used
- inclHiddenDirs: if True, the contents of directories whose names
start with "." are included

Returns a list of the following elements:
"""
lenFromDir = len(fromDir)
if toSubDir == None:
toSubDir = os.path.split(fromDir)[1]
for (dirPath, dirNames, fileNames) in os.walk(fromDir):
if not inclHiddenDirs:
numNames = len(dirNames)
for ii in range(numNames-1, -1, -1):
if dirNames[ii].startswith("."):
del(dirNames[ii])
if not dirPath.startswith(fromDir):
raise RuntimeError("Cannot deal with %r files; %s does not
start with %r" %\
(resBase, dirPath, fromDir))
toPath = os.path.join(toSubDir, dirPath[lenFromDir+1:])
filePaths = [os.path.join(dirPath, fileName) for fileName in
fileNames]
dataFiles.append((toPath, filePaths))

# Add resources
dataFiles = []
# TUI resources
for resBase in ("Help", "Scripts", "Sounds"):
toSubDir = os.path.join("TUI", resBase)
fromDir = os.path.join(tuiRoot, toSubDir)
addDataFiles(dataFiles, fromDir, toSubDir)
# RO resources
for resBase in ("Bitmaps",):
toSubDir = os.path.join("RO", resBase)
fromDir = os.path.join(roRoot, toSubDir)
addDataFiles(dataFiles, fromDir, toSubDir)

# Add tcl snack libraries
pythonDir = os.path.dirname(sys.executable)
snackSubDir = "tcl\\snack2.2"
snackDir = os.path.join(pythonDir, snackSubDir)
addDataFiles(dataFiles, snackDir, snackSubDir)

# Add matplotlib's data files.
matplotlibDataPath = matplotlib.get_data_path()
addDataFiles(dataFiles, matplotlibDataPath, "matplotlibdata")

if NDataFilesToPrint 0:
print "\nData files:"
for pathInfo in dataFiles:
print pathInfo[0]
nFiles = len(pathInfo[1])
for resPath in pathInfo[1][0:NDataFilesToPrint]:
print " ", resPath
if nFiles NDataFilesToPrint:
print " ...and %d more" % (nFiles - NDataFilesToPrint)

versDate = TUI.Version.VersionStr
appVers = versDate.split()[0]
distDir = "TUI_%s_Windows" % (appVers,)

inclModules = [
# "email.Utils", # needed for Python 2.5.0
]
# packages to include recursively
inclPackages = [
"TUI",
"RO",
"matplotlib",
"dateutil", # required by matplotlib
"pytz", # required by matplotlib
# "matplotlib.backends",
# "matplotlib.numerix",
# "encodings",
# "numpy",
# "email", # needed for Python 2.5
]

setup(
options = dict(
py2exe = dict (
dll_excludes = [
# the following are for matplotlib 0.87:
"libgdk_pixbuf-2.0-0.dll",
"libgobject-2.0-0.dll",
"libgdk-win32-2.0-0.dll",
"wxmsw26uh_vc.dll",
],
excludes = [ # modules to exclude
"_gtkagg",
"_wxagg",
],
#includes = inclModules,
packages = inclPackages,
)
),
windows=[ # windows= for no console, console= for console
dict(
script = mainProg,
dest_base = "TUI",
icon_resources = [(1, "TUI.ico")],
),
],
data_files = dataFiles,
)

# rename dist to final directory name
os.rename("dist", distDir)
Feb 13 '08 #3
hi John,

John Henry wrote:
Anybody willing to help?
I struggled the past few days with the same problem,
and with the help of Werner Bruhin (wxPython list) I found a solution.
I had 2 problems:
- not finding mpl datapath
- matplotlib insisted on installing backends that were distorted on my
system

The first problem was solved with the following script:
it has some special parts
- remove the distro and build directories before running setup
- a special matplot part, ensuring mpl-data is copied and installed
- a lot of excludes for matplotlib ( which doesn't seem to work :-( )

Kill_Distro = True
MatPlotLib_Wanted = True

from distutils.core import setup
import py2exe
import sys
subdirs = [ '..\\P24_support', '..\\P24_pictures',
'..\\P24_Lib_Extensions' ]
for subdir in subdirs:
if not ( subdir in sys.path) : sys.path.append ( subdir )

from file_support import *

import shutil
import glob
# ************************************************** *********************
# Some suggests that old build/dist should be cleared
# ************************************************** *********************
dist_paths = [ 'D:\\Data_Python\\P24_PyLab_Works\\build',
'D:\\Data_Python\\P24_PyLab_Works\\dist' ]
for path in dist_paths :
if File_Exists ( path ) :
shutil.rmtree ( path )
# ************************************************** *********************

# ************************************************** *********************
# ************************************************** *********************
data_files = []
packages = []
includes = []
excludes = []
dll_excludes = []
data_files.append ( ( '', glob.glob ( 'templates_*.*' ) ) )

# ************************************************** *********************
# For MatPlotLib
# ************************************************** *********************
if MatPlotLib_Wanted :
import matplotlib

includes.append ( 'matplotlib.numerix.random_array' )

packages.append ( 'matplotlib' )
packages.append ( 'pytz' )

data_files.append ( ( r'mpl-data', glob.glob (
r'P:\\Python\\Lib\\site-packages\\matplotlib\\mpl-data\\*.*' )))
data_files.append ( ( r'mpl-data', glob.glob (

r'P:\\Python\\Lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc' )))
data_files.append ( ( r'mpl-data\\images', glob.glob (
r'P:\\Python\\Lib\\site-packages\\matplotlib\\mpl-data\\images\\*.*' )))
data_files.append ( ( r'mpl-data\\fonts\\afm', glob.glob (

r'P:\\Python\\Lib\\site-packages\\matplotlib\\mpl-data\\fonts\\afm\\*.*' )))
data_files.append ( ( r'mpl-data\\fonts\\pdfcorefonts', glob.glob (

r'P:\\Python\\Lib\\site-packages\\matplotlib\\mpl-data\\fonts\\pdfcorefonts\\*.*'
)))
data_files.append ( ( r'mpl-data\\fonts\\ttf', glob.glob (

r'P:\\Python\\Lib\\site-packages\\matplotlib\\mpl-data\\fonts\\ttf\\*.*' )))

excludes.append ( '_gtkagg')
excludes.append ( '_tkagg' )
excludes.append ( '_agg2' )
excludes.append ( '_cairo' )
excludes.append ( '_cocoaagg' )
excludes.append ( '_fltkagg' )
excludes.append ( '_gtk' )
excludes.append ( '_gtkcairo')
excludes.append ( 'backend_qt' )
excludes.append ( 'backend_qt4')
excludes.append ( 'backend_qt4agg' )
excludes.append ( 'backend_qtagg' )
excludes.append ( 'backend_cairo' )
excludes.append ( 'backend_cocoaagg' )
excludes.append ( 'Tkconstants' )
excludes.append ( 'Tkinter' )
excludes.append ( 'tcl' )
excludes.append ( "_imagingtk" )
excludes.append ( "PIL._imagingtk" )
excludes.append ( "ImageTk" )
excludes.append ( "PIL.ImageTk" )
excludes.append ( "FixTk" )

dll_excludes.append ( 'libgdk-win32-2.0-0.dll' )
dll_excludes.append ( 'libgdk_pixbuf-2.0-0.dll' )
dll_excludes.append ( 'libgobject-2.0-0.dll')
dll_excludes.append ( 'tcl84.dll' )
dll_excludes.append ( 'tk84.dll' )
dll_excludes.append ( 'tclpip84.dll' )
# ************************************************** *********************
# seems not to be found (imported in brick.py)
includes.append ( 'PyLab_Works_properties' )

# ************************************************** *********************
# ************************************************** *********************

# If run without args, build executables, in quiet mode.
if len(sys.argv) == 1:
sys.argv.append("py2exe")

setup (
windows = ['PyLab_Works.py'] ,
options = {
'py2exe' : {
'includes' : includes,
'excludes' : excludes,
'dll_excludes' : dll_excludes,
'packages' : packages,
}},
data_files = data_files
)

import subprocess
result = subprocess.call (
[ 'P:\Program Files\Inno Setup 4\ISCC.exe',
'D:\Data_Python\P24_PyLab_Works\PyLab_Works.iss'])

if (result==0) and Kill_Distro :
for path in dist_paths :
if File_Exists ( path ) :
shutil.rmtree ( path )
Thé essential issue is not to use pylab to do the imports for you,
but perform your own imports,
this might be a lot of work: in my case the import looks like this
(I don't include numerix, because I use numpy),
so in my program to distribute, I use this :

import matplotlib
matplotlib.use('WXAgg')
from matplotlib.backends.backend_wxagg \
import Toolbar, FigureManager
from matplotlib.backends.backend_wxagg \
import FigureCanvasWxAgg as FigureCanvas
from matplotlib import rcParams, mlab, cm
from matplotlib.mlab import meshgrid
from matplotlib.figure import Figure
from matplotlib.axes import Subplot
hope this might help you somewhat,
cheers,
Stef
Feb 17 '08 #4
>>Traceback (most recent call last):
>> File "multicolor.py", line 11, in ?
File "pylab.pyc", line 1, in ?
File "matplotlib\pylab.pyc", line 222, in ?
File "matplotlib\backends\__init__.pyc", line 24, in pylab_setup
File "matplotlib\backends\backend_tkagg.pyc", line 7, in ?
ImportError: No module named Tkinter
Any ideas?
Thanks,
BTW: I don't use Tkinter for GUI, I use PythonCard and wxPython. May
be the Tkinter is invoked by the multicolor.py sample?

I tried another application which I know for sure doesn't use Tkinter
and yet it still tries to invoke Tkinter. So, I need to disable the
backend_tkagg.pyc somehow.

Any suggestions?

Thanks,
hi John,

I've started a discussion on the MatPlotLib list,
(and others, but now limited to matplotlib-list)
you might want to follow the discussion over there.
I just read that the real solution seems to be in setup.cfg,
and AFAIK that file is missing in the distro.

cheers,
Stef
Feb 19 '08 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: John Hunter | last post by:
matplotlib is a 2D plotting package for python with a matlab compatible syntax and output tested under linux and windows platforms. matplotlib-0.30 is available for download at...
3
by: John Hunter | last post by:
matplotlib is a 2D plotting library for python. You can use matplotlib interactively from a python shell or IDE, or embed it in GUI applications (WX, GTK, and Tkinter). matplotlib supports many...
2
by: Grant Edwards | last post by:
I downloaded examples/contour_demo.py, and it doesn't run. I've searched both the user guide and the Wiki for "contour" and got zero hits. ...
0
by: spross | last post by:
hi all i have to use matplotlib on mac os x. on the official site of matplotlib, i found a link to precompiled python packages for mac os x: http://pythonmac.org/packages/py24-fat/index.html ...
4
by: Bill Jackson | last post by:
Hi, I'm having some trouble plotting with the following matplotlibrc: text.usetex : True I tried clearing the cache files under ~/.matplotlib, but this did not help the problem. I'd post...
3
by: vajratkarviraj | last post by:
i hav python2.5, matplotlib0.90.1, and py2exe for python 2.5 all on windows xp... i hav a python program(letsc.py) which uses the matplotlib package... and i want 2 make an exe of it for distribution...
5
by: Hartmut Goebel | last post by:
Hi, has anybody used McMillan Installer, PyInstall or py2exe cross-platform? I have a Windows partition with Python installed there, so this would "only" required working on a different...
0
by: PamMish1982 | last post by:
Hi all, I have recently started using Python and I am trying to make a GUI out of Tkinter. I am using matplotlib for the graphic purposes. I have to make a exe file from this code. I use py2exe...
1
by: Chriskim | last post by:
Hi I am having a very difficult time makine executable file using Py2exe. This program uses "matplotlib" to generate graphs and I think this is causing the errors What extra codes are necessary to...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.