Вообще говоря, pip так и делает — устанавливает пакет только в том случае, если указанное требование не удовлетворено:
(.virtualenv) $ pip freeze > requirements.txt
(.virtualenv) $ pip install -r requirements.txt
Requirement already satisfied (use --upgrade to upgrade): Django==1.9 in ./.virtualenv/lib/python3.4/site-packages (from -r requirements.txt (line 2))
Requirement already satisfied (use --upgrade to upgrade): dj-database-url==0.3.0 in ./.virtualenv/lib/python3.4/site-packages (from -r requirements.txt (line 3))
Requirement already satisfied (use --upgrade to upgrade): psycopg2==2.6.1 in ./.virtualenv/lib/python3.4/site-packages (from -r requirements.txt (line 4))
Requirement already satisfied (use --upgrade to upgrade): wheel==0.26.0 in ./.virtualenv/lib/python3.4/site-packages (from -r requirements.txt (line 5))
Cleaning up...
Может, у Вас установлена старая версия пакета, например, package-name==0.1, а в requirements.txt указано что-нибудь сложное, типа package-name>=0.3,<0.4? Либо dev-репозиторий, который качается из git?