more robust setup.py