*setup.py* is a great tool and the *develop* command is useful for settingup basic development and installing the dependencies identified by the``setup_requires`` keyword. What it does not do is install any tools thatare used for actually hacking on the code base. Many projects include a`pip-formatted requirements file`_ named *requirements.txt* for this verypurposes. It contains the dependencies that you need to have installed towork on the project instead of use it. This extension aims to automatethat pattern and make it easier to set up a development environment byproviding a new setup command named:ref:`requirements <requirements-command>`.

Having a separate *requirements.txt* is a good pattern but it is notwithout its flaws. Having dependencies identified in two places is anoutright violation of the *Don't Repeat Yourself* principle. That issomething else that we can solve pretty easily with a function that youcan read a pip-formatted requirements file and generate a list that isusable as the setup ``setup_requires``, ``install_requires``, or``tests_require`` keywords. This is where the:func:`~setupext.pip.read_requirements_from_file` function comes in.You can use this function to populate the ``setup_requires``,``tests_require``, and ``extras_require`` keywords.