Instructions on how to setup an OSX developer machine for (python/django) development

  • Download Gist
osx_developer_installation.rst
reStructuredText

OSX Developer System installation

This guide assumes a fresh install of Mac OSX 10.6 Snow Leopard.

Homebrew

See https://github.com/mxcl/homebrew/wiki/Installation for details.

  • Make sure X11 is installed (it's included in the default installation on Snow Leopard)
  • Install xcode4 - if you are downloading it from AppStore with Lion, remember to run the file "install Xcode", that will be in the Application folder, after the installation has completed
  • run this simple script: ruby -e "$(curl -fsSL https://raw.github.com/gist/323731/39fc1416e34b9f6db201b4a026181f4ceb7cfa74)"
  • edit PATH (e.g in ~/.bash_profile): export PATH=/usr/local/bin:$PATH (remember to logout and login again for the changes in .bash_profile to get picked up)

python and stuff

See https://github.com/mxcl/homebrew/wiki/Homebrew-and-Python for details.

the basics:

brew install python
/usr/local/share/python/easy_install pip
/usr/local/share/python/pip install --upgrade distribute

homebrew sets things up so that all packages installed via python setup.py install, easy_install or pip get their commands installed to /usr/local/share/python/ by default (see the above link for an explanation). So the first rule of business is to add that path to your PATH. Also if you want to use your homebrew python (and other homebrew stuff) by default, /usr/local/bin should be all the way at the front of your PATH.

~/.bash_profile:

PATH=/usr/local/bin:/usr/local/share/python:$PATH
export PATH

Note

remember to open a new terminal or call source ~/.bash_profile in all of your open terminal windows to get PATH updated.

Before installing stuff with pip make sure you are using the correct version.:

pip --version

should return something like:

pip 1.0 from /usr/local/lib/python2.7/site-packages/pip-1.0-py2.7.egg (python 2.7)

PIL with pillow (recommended)

install some dependencies:

brew install jpeg lcms
pip install Pillow

PIL with patching setup.py

Since PIL is not packaged correctly, setup.py needs to be tweaked.

Use this version of pil (http://dist.repoze.org/PIL-1.1.6.tar.gz) and install it with FREETYPE_ROOT = ("/usr/x11/lib","/usr/x11/include",) in setup.py. Then:

python setup.py build_ext -i
python setup.py install

PIL compatibility

Some python packages don't work when PIL is installed with the PIL prefix. Add a PIL.pth file in /usr/local/lib/python2.7/site-packages/PIL.pth containing the string PIL. Now both from PIL import Image and import Image will work.

This oneliner will do exactly that:

echo "PIL" > /usr/local/lib/python2.7/site-packages/PIL.pth

Aggdraw

aggdraw provides much better anti-aliasing than PIL . And lots of other stuff.

use this version: http://bitbucket.org/2degrees/aggdraw-64bits/src

this needs mercurial to be installed (pip install mercurial)

mkdir ~/tmp
cd ~/tmp
hg clone https://stefanfoulis@bitbucket.org/2degrees/aggdraw-64bits
cd aggdraw-64bits
/usr/local/bin/python setup.py build_ext -i
/usr/local/bin/python setup.py install

Enabling freetype does not work for me. Please share if you find a way :-)

MySQL

server:

brew install mysql
# look at the instructions brew prints after installation. this is the short version:
unset TMPDIR
mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/mysql/5.5.12/com.mysql.mysqld.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/com.mysql.mysqld.plist
# set a root password
/usr/local/Cellar/mysql/5.5.12/bin/mysqladmin -u root password 'new-password'

client:

brew install mysql-connector-c
pip install mysql-python

Postgres

server:

PYTHON=/usr/local/bin/python  brew install postgresql
# look at the instructions brew prints after installation. this is the short version:
initdb /usr/local/var/postgres
cp /usr/local/Cellar/postgresql/9.0.4/org.postgresql.postgres.plist ~/Library/LaunchAgents/
launchctl load -w /usr/local/Cellar/postgresql/x.x.x/org.postgresql.postgres.plist
createuser # create the initial postgres user

python client bindings (does not work without the server):

pip install psycopg2

postgis / geodjango

packages:

brew install postgis # this will handle installing postgres, geos, proj4, and postgis
brew install gdal

creating a spatially-enabled database template:

createdb template_postgis # create a standard postgres db
createlang plpgsql template_postgis # enable the PL/pgSQL PostGIS functions
psql -d template_postgis -f /usr/local/Cellar/postgis/1.5.3/share/postgis/postgis.sql
psql -d template_postgis -f /usr/local/Cellar/postgis/1.5.3/share/postgis/spatial_ref_sys.sql

Creating a new database based on template_postgis:

createdb -T template_postgis [yourdatabase]

Alternatively it is possible to enable spatial functions on a existing databases by calling the above commands for creating template_postgis (except createdb, of course). Just use your existing database name instead of template_postgis

Other useful tools

git and hg:

brew install wget
brew install git hub
pip install mercurial

hub is a useful extension to make git github aware)

I had problems installing mercurial with pip on a 32bit MacBook Pro (Core Duo and less) because it failed to compile the 64bit version of the mercurial.base85 extension. So I downloaded the mercurial 1.8.2 package from pypi and removed -arch x86_64 near the end of setup.py and the ran python setup.py install and it worked fine.

xgettext

install and make the command globally available:

brew install gettext
brew link gettext

more useful stuff

brew install ssh-copy-id
brew install vcprompt
pip install virtualenv
pip install virtualenvwrapper
brew install bash-completion
pip install ipython

the most useful package. this one is a must.:

brew install cowsay
cowsay You can now code python on OSX. Congratulations!

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.