The method I normally use is to override the command in question:
from distutils.command.install import install as DistutilsInstall
class MyInstall(DistutilsInstall):
def run(self):
do_pre_install_stuff()
DistutilsInstall.run(self)
do_post_install_stuff()
...
setup(..., cmdclass={'install': MyInstall}, ...)
This took me quite a while to figure out from the distutils documentation and source, so I hope it saves you the pain.
Note: you can also use this cmdclass parameter to add new commands.