[Pythonmac-SIG] How to get setuptools to build a Universal Binary?
Ned Deily
nad at acm.org
Wed Jan 7 22:30:54 CET 2009
In article <496506CC.30708 at strout.net>, Joe Strout <joe at strout.net>
wrote:
> I'm (still) trying to make a neatly packaged Python app that works on
> both PPC and Intel Macs. All is good except for mysqldb; following the
> procedure I've documented at
> <http://www.dotancohen.com/howto/python-app-mac.html>, my app bundle
> contains an Intel-only binary of the mysqldb library
> (libmysqlclient_r.16.dylib).
>
> This page
> (http://developer.apple.com/opensource/buildingopensourceuniversal.html)
> at Apple suggests a possible solution: build separate Intel and PPC
> binaries, and then combine them with lipo. But of course that's using
> Makefiles. MySQLdb instead uses setuptools.
>
> So: does anyone have a clue how I can convince setuptools to build a PPC
> binary (or better yet, a Universal one) on an Intel machine?
libmysqlclient is part of the MySQL distribution, i.e. not specific to
python, so setuptools isn't the problem here.
It looks like there is an open feature request for the MySQL prebuilt
packages to be built as universal libraries. The submitter includes a
recipe for doing it yourself. I haven't tried it myself, though.
<http://bugs.mysql.com/bug.php?id=23701>
For python packages with C extensions, distutils, and hence setuptools,
does know how to build fat (ppc-32, intel-32) and even universal
({ppc|intel}{32|64}) libraries, depending on how the python distribution
itself was built and assuming the proper OSX SDK was installed from an
Xcode (Apple Developer Tools) distribution (see /Developer/SDKs/). The
recent pythons (2.5/2.6) from python.org are fat and were built with the
MacOSX10.4u.sdk.
BTW, I just use easy_install (from setuptools) to build and install
MySQLdb and, for that matter, nearly all python packages these days. As
long as the package uses distutils and doesn't get too fancy with
overriding or extending them, they install just fine with easy_install
as an egg, even if they don't explicitly use setuptools. In the
increasingly rare cases where that don't work, it's usually immediately
obvious, i.e. the install fails.
Also, eggs don't have to be installed as single zip files: that's just
the default. Add --always-unzip or -Z to the easy_install options to
install unzipped. To always install unzipped, create a
.pydistutils.cfg file in your home directory with an [easy_install]
section:
[easy_install]
zip-ok = 0
So, once you have a universal mysql client library installed,
easy_install -Z MySQL-python
should be all you need to download, build, and install mysqldb.
HTH!
--
Ned Deily,
nad at acm.org
More information about the Pythonmac-SIG
mailing list