setup.py is hard