Refactored setup.py