ionelmc / cookiecutter-pylibrary

Enhanced cookiecutter template for Python libraries.
BSD 2-Clause "Simplified" License
1.25k stars 207 forks source link

pytest command does not work without workarounds #224

Closed parisni closed 1 year ago

parisni commented 3 years ago

hi,

I installed a python-nameless project with pytest support. tox works out of the box for testing.

However, running pytest does not (see below). The only way to make it work is by running PYTHONPATH=src pytest or by adding an empty conftest.py into src. BTW, I cannot figure out why tox is running pytest without trouble.

Thanks for the explanations

(cookiecutter)~/git/python-nameless$ pytest tests/

============================================================================================================= test session starts =============================================================================================================
platform linux -- Python 3.8.5, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
rootdir: /home/me/git/python-nameless, configfile: setup.cfg
collected 0 items / 2 errors                                                                                                                                                                                                                  

=================================================================================================================== ERRORS ====================================================================================================================
___________________________________________________________________________________________________ ERROR collecting tests/test_nameless.py ___________________________________________________________________________________________________
tests/test_nameless.py:2: in <module>
    from nameless.cli import main
E   ModuleNotFoundError: No module named 'nameless'
___________________________________________________________________________________________________ ERROR collecting tests/test_nameless.py ___________________________________________________________________________________________________
ImportError while importing test module '/home/me/git/python-nameless/tests/test_nameless.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/lib/python3.8/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
tests/test_nameless.py:2: in <module>
    from nameless.cli import main
E   ModuleNotFoundError: No module named 'nameless'
=========================================================================================================== short test summary info ===========================================================================================================
ERROR tests/test_nameless.py - ModuleNotFoundError: No module named 'nameless'
ERROR tests/test_nameless.py
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 2 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
============================================================================================================== 2 errors in 0.12s ==============================================================================================================
ionelmc commented 3 years ago

This is intentional - you are prevented to run the code without installing it. I wrote about this here https://blog.ionelmc.ro/2014/05/25/python-packaging/

If you'd like to work virtualenv-style on your project then perhaps run something alone these lines?

source .tox/py38/bin/activate
pytest ...
parisni commented 3 years ago

then what trick in the tox.ini makes pytest working then ? I cannot figure out. For example, PYTHONPATH=tests shouldn't help

ionelmc commented 3 years ago

It installs your code in the virtualenv (eg .tox/py38). This a bit more complicated but it could be summed up as python setup.py sdist && .tox/py38/bin/pip install .tox/dists/project-0.1.tar.gz or something like that.

Where are you going with this? What's the actual problem you're having?

parisni commented 3 years ago

well, i am trying to reproduce your config on one on my existing project (moving the project_name into src/project_name) and so far my pytests are not running as smoth as before. Anyway thanks for your efforts/time ! This is a hot topic.

ionelmc commented 3 years ago

Well you need to install the code into the virtualenv you're gonna tests with. At the very least a venv/bin/python setup.py install. Or just use tox?