Ludwig, this is one of the most entertaining e-mails I've read in a
while, and I think your arguments make a lot of sense.
Given infinite developer resources, do you think there's any logic to
providing *both* system Python and python.org based binaries? How much
additional work would that be?
I think the big problems to solve now is
(a) get to the bottom of why the new installer is breaking existing
installations of dateutil and pytz. Russell: even though they are not
currently working, could you provide what you have so that others can
have a look?
(b) find a way to include the Python dependencies and perhaps be more
clever about Numpy. I think using `pip bundle` comes close -- we then
just need to make a fairly generic installer on top of what it
produces. Any Mac installer experts out there that want to step up?
Mike
On 08/01/2013 06:45 PM, Ludwig Schwardt wrote:
Hi Russell (and Mike),
Is it useful in the long term to have such a packager? My impression is
that as soon as packaging is more robust we'll switch to using pip or
easy_install.
First off, sorry for the long email - got a bit carried away :-) The
summary is that I propose we keep the dmg installer but maybe make it
use the system Python for reasons illustrated below.
For the record, I'm using pip / easy_install to install matplotlib
from source on my Mac and that has been working fine for a while now.
You only need to add pkg-config (and the development tools, obviously)
to a virgin Mac system and this is now really easy in the days of
Homebrew.
Of course, binary packages have the extra issue of a dependency on the
environment for which it is built, which complicates matters for
binary eggs (thanks for the reminder of wheel, Mike - definitely
something to watch). This is the main reason why I don't use the Mac
installer dmg: it's built for python.org <http://python.org> Python
and I prefer to use system Python instead.
(On this note, it would be interesting to find out how matplotlib
people get Python on their Mac these days. My gut feel tells me that
Homebrew Python will be quite popular these days, followed by EPD /
Anaconda and then maybe python.org <http://python.org> Python. If you
use Homebrew there is now the option of "brew install matplotlib"
courtesy of Samuel John
<https://github.com/samueljohn/homebrew-python/blob/master/matplotlib.rb>,
while EPD and Anaconda ship with their own versions of matplotlib, so
most of those users are taken care of.)
To answer your original question: I do see a use for a dmg installer
in the long term, but one you might not have considered. I picture a
Mac user who is not familiar with Python but wants to try out
matplotlib (the image of Justin Long saying "Hello, I'm a Mac" somehow
comes to mind :-)).
Justin has never heard of easy_install or even a compiler and might
not be that comfortable with the Terminal. On the other hand, he is
used to installing software by downloading and clicking on a dmg or
via the App Store. This is a person who is starting out with these
tools and needs as few obstacles as possible to get going. Once he is
up and running and likes what he sees, he might be persuaded to
install a more full-fledged Python distribution or the rest of the
SciPy stack.
As an experiment I put myself in the shoes of Justin. I actually did
the steps below on a spare MacBook Pro running Mac OS X 10.7.5 that
was unsullied by extra Pythons and rogue matplotlibs and what not.
<BEGIN EXPERIMENT>
Someone told me about "matplotlib" (maybe after seeing a plot in a
talk or a paper) which led me to matplotlib.org
<http://matplotlib.org> (first Google hit).
I see "Download" and go to the downloads page
<http://matplotlib.org/downloads.html>. I see a bunch of links,
including these two under "Latest stable version":
matplotlib-1.2.1-py2.7-python.org-macosx10.3.dmg
matplotlib-1.2.1-py2.7-python.org-macosx10.6.dmg
Since I am on Lion I guess I have to download the latter (although the
fact that it says 10.6 and not 10.7 worries me...). I'm not sure what
the rest of the filename means - what is py27-python.org
<http://py27-python.org>? I download the dmg and open it. I am
impatient like most users and click on "Continue".
Oops, there is a problem. The third "Continue" button is grayed out
with an error that says: "matplotlib 1.2.1 can't be installed on this
disk. matplotlib requires System Python 2.7 to install." [This is
ironic because, unbeknownst to Justin, he actually *has* System Python
2.7 installed...] Time to click on "Go Back"... Aah, Important
Information (I kick myself for not reading this): "matplotlib for
MacOS X 10.6 or later [cool!] and 64-bit Python 2.7 from python.org
<http://python.org> (not Apple's built-in Python)". So that's probably
what py2.7-python.org <http://py2.7-python.org> refers to. If Justin
is patient enough he might also spot the following line: "Before
running matplotlib, you must install numpy."
[Clicking "Go Back" would have been the more useful thing to do in
this case. If I had decided to return to matplotlib.org
<http://matplotlib.org>, I might have seen "Need help?" and clicked on
the "faq" link and ended up at the OS-X Notes
<http://matplotlib.org/1.3.0/faq/installing_faq.html#os-x-notes>. This
mentions "several alternative versions of python" such as EPD,
MacPython (yikes, Leopard only!) or python.org <http://python.org>.
But the installer only works with the latter... Surprisingly enough I
could not find *any* explicit mention in the matplotlib installation
docs that you need to install NumPy first. EDIT: Oh wait, it's well
documented here <http://matplotlib.org/users/installing.html> but I
can only reach this important page by clicking on "docs" in the
toolbar below the page title and spotting the "Installing" link. Maybe
the "Download" section on the front page should read "Read the
installation instructions
<http://matplotlib.org/users/installing.html> first and then visit the
matplotlib downloads page <http://matplotlib.org/downloads.html>."]
Time to visit python.org <http://python.org>. I see "Download" and
then notice "Python 2.7.5 Mac OS X 64-bit/32-bit x86-64/i386 Installer
(for Mac OS X 10.6 and later [2])". I download the dmg and click on
it. The installation is successful. I go back to the matplotlib dmg
and retry the installation - success!
Mmm, what now?
[This is not really matplotlib's problem, but I found surprisingly few
resources that tell you how to start Python on the Mac if you know
absolutely nothing about Unix and Terminals and such. If you search
for "python mac" on Google you at least get some idea at the first hit
<http://www.python.org/getit/mac/>. The official Mac usage page
<http://docs.python.org/2/using/mac.html> is quite technical but
mentions that "your best way to get started with Python on Mac OS X is
through the IDLE integrated development environment" which at least
gets you to a Python prompt.]
As a typical Mac user I expect that something has appeared in
/Applications. I see no matplotlib but at least there is a Python 2.7
folder. I click on "Python Launcher" which seems like the obvious
place to start. Nothing happens - oh wait, something has started but
it doesn't do much. I click on IDLE and this looks more promising. At
least there is a prompt that looks like the examples on the net.
Alternatively I have somehow found out how to run Python in the Terminal.
Next issue... I type "import matplotlib" and up comes "ImportError: No
module named numpy". A search reveals www.numpy.org
<http://www.numpy.org>. I click on "Getting NumPy" and end up at the
SciPy installation page <http://www.scipy.org/install.html>. It
mentions Mac packages but only give an example for using Macports.
Otherwise it suggests installing a full Python distribution (What,
start from scratch? But I'm so close!).
Argh, this is becoming a PITA. [At this stage Justin might
accidentally install a compiler and enter a new world of hurt :-)] Oh
well, the interwebs to the rescue. Search for "numpy mac". The first
hit is the aforementioned page. The second hit
<http://stackoverflow.com/questions/7338051/install-numpy-on-mac-os-x-lion-10-7>
looks more promising, but contains many conflicting answers ("Lion
comes with numpy installed?"). If I'm lucky I might follow the last
suggestion which reveals the NumPy SourceForge
<http://sourceforge.net/projects/numpy/files/NumPy/> page. Or I could
read the Numpy User Guide (DRAFT) -> Building and installing NumPy ->
Mac OS X which points there too.
I assume I want the latest version (1.7.1) and I stumble upon
numpy-1.7.1-py2.7-python.org-macosx10.6.dmg. Hey, that has a familiar
and comforting filename! It installs without a hitch and finally
"import matplotlib" succeeds and I manage to make a plot from IDLE!
Now I need a drink...
<END EXPERIMENT>
This was quite an eye-opener for me (although I wish I could shut my
eyes again quickly and forget this ever happened :-)). Hopefully the
typical would-be matplotlib user is not as hapless as Justin, but I
suspect that quite a few need guidance. I guess their best chance for
happiness is to stumble upon a full-fledged Python distribution but if
matplotlib is their entry point to the Python universe they might be
in for an adventure ride. Although if I had read the proper matplotlib
installation instructions first I might have gone straight to EPD...
I picture the following basic Mac user groups:
- Black belt: pulls git repositories to get bleeding-edge packages,
compiles from scratch, lives in the Terminal, probably uses Homebrew
Python or EPD / Anaconda or some custom Python installation
- Savvy: likes to install packages via pip / easy_install, probably
has a compiler, not afraid of Terminal, probably uses Homebrew Python
or EPD / Anaconda or maybe even Macports / Fink Python
- No Fuss: likes to click on a dmg, has no compiler, rarely uses
Terminal, possibly has EPD / Anaconda or just system Python
- Justin: a hapless version of No Fuss :-)
The problem I see with the binary dmg installer is that it is
currently aimed somewhere between Savvy and No Fuss users. It won't
help the Black Belt and EPD / Anaconda users and is also not as
straightforward as the No Fuss user would have hoped.
This is why I'm wondering whether it would make more sense to base the
dmg installer on system Python instead. Since Lion ships with Python
2.7.1, NumPy 1.5.1, libfreetype and libpng, OS X has had the potential
since 10.7 to run matplotlib out of the box with no modifications or
extra dependencies (although the latest 1.3.0 might throw a spanner in
the works again by shedding dateutil, pytz and friends). A No Fuss
user like Justin could therefore click on the dmg as he does with all
his other software installations and matplotlib will "just work" like
the OS X mantra says. Having used system Python extensively for many
years I can vouch that it is more than adequate for someone wanting to
try out matplotlib and sure is easier to install!
Of course, maintaining the dmg installer is already a big job and your
work load is therefore probably the biggest factor in these
discussions :-)
Best regards,
Ludwig
------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent
caught up. So what steps can you take to put your SQL databases under
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent
caught up. So what steps can you take to put your SQL databases under
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel