MySQLdb Installation

Prerequisites

Building and installing

First thing to do is read setup.py. There are some variables towards the beginning that tell it where your MySQL include files and libraries are, compiler flags, loader flags, etc. You will rarely have to change this unless you have some kind of weird setup.

After the main variables section, there is some platform-specific configuration. If your platform is not listed, this is where you want to add it. Note that most POSIX and UNIX-ish systems will work just fine the way it is.

Depending on which version of MySQL you have, you may have the option of using three different client libraries:

mysqlclient
mostly but not guaranteed thread-safe
mysqlclient_r
thread-safe, use if you can
mysqld
embedded server

mysqlclient is used by default. To use one of the others, set the environment variable mysqlclient to the name of the library you want to use. In a Bourne-style shell, use:

$ export mysqlclient=mysqlclient_r

There are several active versions of MySQL out there, and this makes it a little tricky to configure setup.py automatically and still be cross-platform. setup.py assumes you are using version 4.0.20. To specify a different version, set the environment variable mysqlversion.

If your MySQL is compiled with certain options, you may need to add some more libraries to the link. In particular, with 4.0 and up, if MySQL was configured to use SSL, you need to link against crypto and ssl. You can do this by setting the environment variable mysqloptlibs a space-separated list of libraries.

If you have the dynamic client libraries (on Linux, .so vs. .a), those will be used by default. If they are not on your standard loader path, you will have to set or adjust the LD_LIBRARY_PATH environment variable (on Linux) or whatever your platform requires. Otherwise, you can adjust setup.py to link against the static library. If you are using standard RPM packaging, you shouldn't have to mess with this. If you compiled MySQL yourself, you might. There is a runtime_libraries_dir variable you can play with, but this does not work on all system; in particular, it doesn't seem to work on Linux gcc.

Finally, putting it together:

$ tar xfz MySQL-python-1.1.7.tar.gz
$ cd MySQL-python-1.1.7
$ export mysqlversion="4.0.20"
$ export mysqlclient="mysqlclient_r"
$ export mysqloptlibs="ssl crypto"
$ python setup.py build
$ su # or use sudo
# python setup.py install

NOTE: You must export environment variables for setup.py to see them. Depending on what shell you prefer, you may need to use "export" or "set -x" (bash and other Bourne-like shells) or "setenv" (csh-like shells).

Windows

I don't do Windows. However if someone provides me with a package for Windows, I'll make it available. Don't ask me for help with Windows because I can't help you.

Zope

If you are using a binary package of Zope, you need run setup.py with the python executable that came with Zope. Otherwise, you'll install into the wrong Python tree and Zope (ZMySQLDA) will not be able to find _mysql.

With zope.org's Zope-2.5.1-linux2-x86 binary tarball, you'd do something like this:

$ export ZOPEBIN=".../Zope-2.5.1-linux2-x86/bin" # wherever you unpacked it
$ $ZOPEBIN/python setup.py install # builds and installs

Binary Packages

I don't plan to make binary packages any more. However, if someone contributes one, I will make it available. Several OS vendors have their own packages available.

RPMs

If you prefer to install RPMs, you can use the bdist_rpm command with setup.py. This only builds the RPM; it does not install it. You may want to use the --python=XXX option, where XXX is the name of the Python executable, i.e. python, python2, python2.1; the default is python. Using this will incorporate the Python executable name into the package name for the RPM so you have install the package multiple times if you need to support more than one version of Python.

Red Hat Linux

MySQL-python is pre-packaged in Red Hat Linux 7.x and newer. This likely includes Fedora Core and Red Hat Enterprise Linux. You can also build your own RPM packages as described above.

Debian GNU/Linux

Packaged as python-mysql:

# apt-get install python-mysql

Gentoo Linux

Packaged as mysql-python. Gentoo is also my development platform:

# emerge sync
# emerge mysql-python
# emerge zmysqlda # if you use Zope

BSD

MySQL-python is a ported package in FreeBSD, NetBSD, and OpenBSD, although the name may vary to match OS conventions.

License

GPL or the original license based on Python 1.5.2's license.

Author:Andy Dustman <andy@dustman.net>
Revision:$Id$