refactor the setup.py