refactored setup.py