kragniz/cookiecutter-pypackage-minimal

tests package gets installed

asmodehn opened this issue · 1 comments

While playing with a package made from this template, I notice the tests package gets found by setuptools when running python setup.py install and installed as a tests package (visible in site-packages).
Probably not what we want ?

I would advise to remove the __init__ module from there, following pytest structure https://docs.pytest.org/en/latest/goodpractices.html#tests-outside-application-code

Hi Alex,

I agree with you, the tests directory should not be a package but in some situations, developers add an __init__.py file in order to define some "global" variables or functions used in the tests.
Classic usages which come in mind:

  • define the path to a resources directory.
  • define a base class for unit testing: a child of unittest.TestCase,
  • define a function to populate a database.

Of cours, one can use PyTest fixtures for that. But unittest users won't…

Actually this is a problem with setuptools.find_packages because it searches packages in all directories.

If you generate a hypothetical "demo" project, you can check the result of find_packages:

python -c "from setuptools import find_packages; print(find_packages())"
['demo', 'tests']

The workaround is to exclude the tests directory. For instance, here is how you can fix the problem for the "demo" project:

$ python -c "from setuptools import find_packages; print(find_packages(exclude=('tests',)))"
['demo']

To conclude, IMO, we can:

  • remove the tests/__init__py and let the developer adding one if he thinks it's necessary,
  • exclude the tests directory from the list of packages in the call of find_packages.

Regards,
– Laurent.