I would emphasize that setup.py is the way to go. Requirements.txt was only ever intended to be a way for a developer to provide a dependency chain so that other developers could duplicate the environment if necessary. Today's common usage was never originally intended.
The `extras_require` that you have discovered is an excellent way of segregating non-installation-required dependencies. On some of my projects, I have built up the following "standard" extras: * all - this is programmatically defined as every dependency including the package itself * dev - this is programmatically defined as every dependency excluding the packge itself * test - all testing dependencies (i.e pytest, coverage, etc.) * docs - all documentation dependences (i.e. sphinx) For onboarding, I typically just then tell someone to use `-e .[all]` for setting up a development environment. -- Distutils-SIG mailing list distutils-sig@python.org https://mail.python.org/mm3/mailman3/lists/distutils-sig.python.org/ Message archived at https://mail.python.org/mm3/archives/list/distutils-sig@python.org/message/JVNSAKVYP2VASPP66M4TCLQVIDMTH5P2/