You can do it without duplicating requirements, by having a requirements.txt parser in setup.py (yeah ick).

setup.py won't install anything system wide (it can't) when not run as root, it just drops eggs into the current directory (which is ugly, but survivable

But yes, the current setup.py is a totally acceptable style choice.