add setup.py, split one file into different modules