[Distutils] Where should I put tests when packaging python modules?

Erik Bray erik.m.bray at gmail.com
Wed Oct 7 17:37:45 CEST 2015

On Wed, Oct 7, 2015 at 11:31 AM, Ionel Cristian Mărieș
<contact at ionelmc.ro> wrote:
> On Wed, Oct 7, 2015 at 6:13 PM, Erik Bray <erik.m.bray at gmail.com> wrote:
>> > Lets not use `setup.py test`. It's either bad or useless.
>> Says who?  Many of the projects I'm involved in use `setup.py test`
>> exclusively and for good reason--they all have C and/or Cython
>> extension modules that need to be built for the tests to even run.
>> Only setup.py knows about those extension modules and how to find and
>> build them.  Using `setup.py test` ensures that everything required to
>> run the package (including runtime dependencies) is built and ready,
> Well ok, then it's not useless. :-)
>> For pure Python packages I think it's less important and can usually
>> rely on "just run 'nose', or 'py.test'"  (or "tox" but that's true
>> regardless of how the tests are invoked outside of tox).
> That implies you would be testing code that you didn't install. That allows
> preventable mistakes, like publishing releases on PyPI that don't actually
> work, or do not even install at all (because you didn't test that).
> `setup.py test` doesn't really allow you to fully test that part, but Tox
> does.

Which, incidentally, is a great reason for installable tests :)
Running in the source tree is great for development.  But when
preparing a release it's great to be able to create an sdist, install
that into a virtualenv, and run `package.test()` or `python -m
package.tests` or whatever.  Occasionally catches problems with the
source dist if nothing else.


More information about the Distutils-SIG mailing list