Compiling matplotlib on OS-X without Fink

Hi all,

I just got matplotlib working on my box, so I thought I'd post this, so that it will be in the archives, and because I'd like others to try it and let me know if it doesn't work for you.

One question for the knowledgeable folks here:

I have /usr/include/zlib.h on my system, but I have no idea where I got it. I do know that it isn't on other systems in my office without the dev tools. Did it come with the dev tools, or something else I installed?

Anyway, here's what worked for me:

Installing matplotlib on OS-X (10.3.7)

Here are my notes as to what it took to get matplotlib (0.71) installed and working on OS-X. I have so far kept a fink-free system, so that's what I've done here as well. I use it with the AGG back end for generating images for a web site, and hopefully with the wx backend for interactive use and embedding in wx Applications.

1) Requirements:

···

-------------------------------------------
According to the matplotlib install docs (http://matplotlib.sourceforge.net/installing.html), you need the following:

freetype (>= 2.1.7)
libpng
zlib

Personally, I've been avoiding Fink, as it doesn't seem to play well with the rest of OS-X, including the Apple supplied Python, so I've looked elsewhere for these libs.

a) Freetype:
I seem to have it in:

/usr/X11R6/include/freetype2

I don't think I installed it myself, so it probably came with Apple's X11, Which I did install.

However, I seemed to be having problems with that version, so I looked, and it seems to be:

libfreetype.6.3.dylib

Given that freetype2 is currently at version 2.1.9, I have no idea what to make of that! So off to sourceforge to get a new freetype:

http://freetype.sourceforge.net/index2.html

where I got:

freetype-2.1.9.tar.gz

Following the instructions in docs/INSTALL.UNX:

$ ./configure
$ make
$ sudo make install

That puts it in /usr/local/..., which is a good place for it.

b) zlib:
I have:
/usr/include/zlib.h

I don't know where I might have gotten it, but there it is.

NOTE: I checked on another system in my office, and it doesn't have zlib. It also doesn't have any developer tools installed, so you couldn't build anything on it anyway. If zlib comes with XCode tools, anyone who can build should have it. It also may have come with some other package I've installed, but I have no idea what. Let me know if you know.

c) libpng:
This, I didn't have on my system, except inside the wxWidgets source tree, so I went looking for it.

Note that you need zlib to compile libpng, so make sure you have that first.

I did a google search for "libpng OS-X". I found:

http://www.libpng.org/pub/png/pngcode.html

Which led me to the libpng sourceforge site.

From there I downloaded:

libpng-1.2.8.tar.gz

unpacked it, and opened a terminal in the libpng-1.2.8 directory, and did:

$ cp scripts/makefile.darwin ./makefile

(note that according to the INSTALL, there is supposed to be a makefile.macosx, but it wasn't there)

I took a look in the makefile, and found:

ZLIBLIB=/usr/local/lib
ZLIBINC=/usr/local/include

Which is not where zlib is on my system. However, while I can find zlib.h, I couldn't fine the actual lib, so I tried make without changing anything.

$ make

Which seemed to work fine. zlib must be installed in a standard location, and gcc found it.

$ sudo make install

to install the lib into /usr/local/ (this was specified in the makefile, and it's a good place for it)

$ make test
and
$ ./pngtest pngnow.png

Which both seemed to pass.

d) Numeric or numarray:

I already have Numeric installed, from Bob Ippolito's PIMP (MacPython Package Manager) repostitory. (www.undefined.org/python)

2) Building matplotlib
---------------------------------------------------------
First, I took a look at the matplotlib setup.py. It had "auto" for the back-end flags, so I thought I would give it a try that way:

$python setup.py build

That worked!
$ sudo python setup.py install

4) And now to test!

$python

>>> import pylab
Could not open font file /Library/Fonts/NISC18030.ttf
No module named pygtk
PyGTK version 1.99.16 or greater is required to run the GTK Matplotlib backends

This turns out to be because the matlabrc file sets the GTKAgg back end as the default. You have two choices.

1) you can set the back end before importing pylab.
>>> import matplotlib
>>> matplotlib.use('Agg')
>>> import pylab

This works fine

2) Edit the matplotlibrc file. I found it in:
/System/Library/Frameworks/Python.framework/Versions/2.3/share/matplotlib/.matplotlibrc

Change the line:
backend : GTKAgg # the default backend
to
backend : Agg # the default backend

And you're all set to make images for the web, etc.

I'm going to leave getting it to work with wxPython for another day.

-Chris

--
Christopher Barker, Ph.D.
Oceanographer
                                         
NOAA/OR&R/HAZMAT (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception

Chris.Barker@...259...

Hi all,

See my previous message about building matplotlib on OS-X. Now that I've done that, I need to give it to some of my coworkers that don't have the dev tools installed, and are aghast at the idea of typing ./configure; make, make install.

So, how do I make a binary distro? I know I can get distutils to do it, but it won't included the needed extra libs:

freetype
libpng
zlib

It seems I have three options:

1) Just give them a tarball of the compiled libs, ready to be dropped into /usr/local (I don't like that option, what If I clobber something?)

2) Somehow put the libs inside the matplotlib distro

3) Statically link those libs into the matplotlib extensions

I have no idea how to do 2 or 3, but could probably figure it out.

What do folks suggest? Any pointers?

Also, what's up with the Packman databases? I think I saw a note from Bob saying he isn't maintaining his. Jack, are you maintaining yours? If either of these is being maintained, how would I get matplotlib into it?

thanks,
-Chris

···

--
Christopher Barker, Ph.D.
Oceanographer
                                         
NOAA/OR&R/HAZMAT (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception

Chris.Barker@...259...

Chris,

An alternative way to get freetype, libpng and zlib for OS X is to use the the i-Installer (http://ii2.sourceforge.net/) distribution application. It is primarily for TeX on OS X, but it provides several other useful binaries for OS X.

Larry

Hi all,

I just got matplotlib working on my box, so I thought I'd post this, so that it will be in the archives, and because I'd like others to try it and let me know if it doesn't work for you.

One question for the knowledgeable folks here:

I have /usr/include/zlib.h on my system, but I have no idea where I got it. I do know that it isn't on other systems in my office without the dev tools. Did it come with the dev tools, or something else I installed?

Anyway, here's what worked for me:

Installing matplotlib on OS-X (10.3.7)

Here are my notes as to what it took to get matplotlib (0.71) installed and working on OS-X. I have so far kept a fink-free system, so that's what I've done here as well. I use it with the AGG back end for generating images for a web site, and hopefully with the wx backend for interactive use and embedding in wx Applications.

1) Requirements:
-------------------------------------------
According to the matplotlib install docs (http://matplotlib.sourceforge.net/installing.html), you need the following:

freetype (>= 2.1.7)
libpng
zlib

Personally, I've been avoiding Fink, as it doesn't seem to play well with the rest of OS-X, including the Apple supplied Python, so I've looked elsewhere for these libs.

a) Freetype:
I seem to have it in:

/usr/X11R6/include/freetype2

I don't think I installed it myself, so it probably came with Apple's X11, Which I did install.

However, I seemed to be having problems with that version, so I looked, and it seems to be:

libfreetype.6.3.dylib

Given that freetype2 is currently at version 2.1.9, I have no idea what to make of that! So off to sourceforge to get a new freetype:

The FreeType Project

where I got:

freetype-2.1.9.tar.gz

Following the instructions in docs/INSTALL.UNX:

\./configure make
$ sudo make install

That puts it in /usr/local/..., which is a good place for it.

b) zlib:
I have:
/usr/include/zlib.h

I don't know where I might have gotten it, but there it is.

NOTE: I checked on another system in my office, and it doesn't have zlib. It also doesn't have any developer tools installed, so you couldn't build anything on it anyway. If zlib comes with XCode tools, anyone who can build should have it. It also may have come with some other package I've installed, but I have no idea what. Let me know if you know.

c) libpng:
This, I didn't have on my system, except inside the wxWidgets source tree, so I went looking for it.

Note that you need zlib to compile libpng, so make sure you have that first.

I did a google search for "libpng OS-X". I found:

PNG Source Code

Which led me to the libpng sourceforge site.

From there I downloaded:

libpng-1.2.8.tar.gz

unpacked it, and opened a terminal in the libpng-1.2.8 directory, and did:

$ cp scripts/makefile.darwin ./makefile

(note that according to the INSTALL, there is supposed to be a makefile.macosx, but it wasn't there)

I took a look in the makefile, and found:

ZLIBLIB=/usr/local/lib
ZLIBINC=/usr/local/include

Which is not where zlib is on my system. However, while I can find zlib.h, I couldn't fine the actual lib, so I tried make without changing anything.

$ make

Which seemed to work fine. zlib must be installed in a standard location, and gcc found it.

$ sudo make install

to install the lib into /usr/local/ (this was specified in the makefile, and it's a good place for it)

make test and ./pngtest pngnow.png

Which both seemed to pass.

d) Numeric or numarray:

I already have Numeric installed, from Bob Ippolito's PIMP (MacPython Package Manager) repostitory. (www.undefined.org/python)

2) Building matplotlib
---------------------------------------------------------
First, I took a look at the matplotlib setup.py. It had "auto" for the back-end flags, so I thought I would give it a try that way:

$python setup.py build

That worked!
$ sudo python setup.py install

4) And now to test!

$python

>>> import pylab
Could not open font file /Library/Fonts/NISC18030.ttf
No module named pygtk
PyGTK version 1.99.16 or greater is required to run the GTK Matplotlib backends

This turns out to be because the matlabrc file sets the GTKAgg back end as the default. You have two choices.

1) you can set the back end before importing pylab.
>>> import matplotlib
>>> matplotlib.use('Agg')
>>> import pylab

This works fine

2) Edit the matplotlibrc file. I found it in:
/System/Library/Frameworks/Python.framework/Versions/2.3/share/matplotlib/.matplotlibrc

Change the line:
backend : GTKAgg # the default backend
to
backend : Agg # the default backend

And you're all set to make images for the web, etc.

I'm going to leave getting it to work with wxPython for another day.

-Chris

--
Christopher Barker, Ph.D.
Oceanographer
                                        
NOAA/OR&R/HAZMAT (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception

Chris.Barker@...259...
_______________________________________________
Pythonmac-SIG maillist - Pythonmac-SIG@...48...
Pythonmac-SIG Info Page

Larry Meyn
Aerospace Operations Modeling Office

M/S 210-10
NASA Ames Research Center
Moffett Field, CA 94035-1000

E-mail: Larry.A.Meyn@...481...
Phone: (650) 604-5038
Fax: (650) 604-0222
E-Fax: (425) 944-5526 sent via e-mail

Larry Meyn
Aerospace Operations Modeling Office

M/S 210-10
NASA Ames Research Center
Moffett Field, CA 94035-1000

E-mail: Larry.A.Meyn@...481...
Phone: (650) 604-5038
Fax: (650) 604-0222
E-Fax: (425) 944-5526 sent via e-mail

···

On Feb 1, 2005, at 3:50 PM, Chris Barker wrote:

See my previous message about building matplotlib on OS-X. Now that I've done that, I need to give it to some of my coworkers that don't have the dev tools installed, and are aghast at the idea of typing ./configure; make, make install.

So, how do I make a binary distro? I know I can get distutils to do it, but it won't included the needed extra libs:

freetype
libpng
zlib

zlib ships with OS X

It seems I have three options:

1) Just give them a tarball of the compiled libs, ready to be dropped into /usr/local (I don't like that option, what If I clobber something?)

2) Somehow put the libs inside the matplotlib distro

That's possible

3) Statically link those libs into the matplotlib extensions

But this is better

I have no idea how to do 2 or 3, but could probably figure it out.

This is (3)
Make sure you don't have libpng.dylib or libfreetype.dylib sitting around on your link paths...

Build them like this:
./configure --disable-shared --enable static

Make sure you only have libpng.a and libfreetype.a on your link paths. It will link statically.

What do folks suggest? Any pointers?

After you've linked matplotlib statically, use bdist_mpkg from py2app to make a redistributable .pkg installer for it. After installing py2app, you should have a tool in /usr/local/bin called "bdist_mpkg" that will Just Do It without any setup.py modifications to the target lib... so go into the matplotlib directory, type bdist_mpkg, and cross your fingers that a dist/matplotlib-xx.pkg will appear. If you have any problems beyond that, let me know.

-bob

···

On Feb 1, 2005, at 19:04, Chris Barker wrote: