I thought py.test
is "standalone" in a sense that it treats test_*.py
files "as it is", and only imports modules specified in these files, with no respect to any surrounding files. It looks like I'm wrong. Here is my dialog with py.test
:
$ ls __init__.py test_pytest.py $ cat __init__.py $ cat test_pytest.py def test_pytest(): assert True $ py.test test_pytest.py ========================================================= test session starts ========================================================== platform darwin -- Python 2.7.2 -- pytest-2.1.3 collected 0 items / 1 errors ================================================================ ERRORS ================================================================ ___________________________________________________ ERROR collecting test_pytest.py ____________________________________________________ /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/py-1.4.5-py2.7.egg/py/_path/local.py:529: in pyimport > mod = __import__(modname, None, None, ['__doc__']) E ImportError: No module named test_pytest ======================================================= 1 error in 0.01 seconds ======================================================== $ rm __init__.py $ py.test test_pytest.py ========================================================= test session starts ========================================================== platform darwin -- Python 2.7.2 -- pytest-2.1.3 collected 1 items test_pytest.py . ======================================================= 1 passed in 0.01 seconds ======================================================= $
How do I make py.test
work and still have my __init__.py
files?
UPDATE
In comments, Holger Krekel asked, what is the name of parent directory. And it turns out that I can reproduce the error above only having a certain parent directory name (e.g. the same name as one of the packages installed, like distutils
). See here:
~/test_min $ tree . └―― distutils ├―― __init__.py └―― test_pytest.py 1 directory, 2 files ~/test_min $ cat distutils/__init__.py ~/test_min $ cat distutils/test_pytest.py def test_pytest(): assert True ~/test_min $ py.test distutils/test_pytest.py ======================== test session starts ========================= platform darwin -- Python 2.7.2 -- pytest-2.1.3 collected 0 items / 1 errors =============================== ERRORS =============================== _____________ ERROR collecting distutils/test_pytest.py ______________ /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/py-1.4.5-py2.7.egg/py/_path/local.py:529: in pyimport > mod = __import__(modname, None, None, ['__doc__']) E ImportError: No module named test_pytest ====================== 1 error in 0.01 seconds ======================= ~/test_min $ rm distutils/__init__.py ~/test_min $ py.test distutils/test_pytest.py ======================== test session starts ========================= platform darwin -- Python 2.7.2 -- pytest-2.1.3 collected 1 items distutils/test_pytest.py . ====================== 1 passed in 0.01 seconds ====================== ~/test_min $ touch __init__.py ~/test_min $ ls __init__.py distutils ~/test_min $ touch distutils/__init__.py ~/test_min $ py.test distutils/test_pytest.py ======================== test session starts ========================= platform darwin -- Python 2.7.2 -- pytest-2.1.3 collected 1 items distutils/test_pytest.py . ====================== 1 passed in 0.02 seconds ====================== ~/test_min $ rm __init__.py ~/test_min $ py.test distutils/test_pytest.py ======================== test session starts ========================= platform darwin -- Python 2.7.2 -- pytest-2.1.3 collected 0 items / 1 errors =============================== ERRORS =============================== _____________ ERROR collecting distutils/test_pytest.py ______________ /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/py-1.4.5-py2.7.egg/py/_path/local.py:529: in pyimport > mod = __import__(modname, None, None, ['__doc__']) E ImportError: No module named test_pytest ====================== 1 error in 0.01 seconds ======================= ~/test_min $ mv distutils foobar ~/test_min $ py.test foobar/test_pytest.py ======================== test session starts ========================= platform darwin -- Python 2.7.2 -- pytest-2.1.3 collected 1 items foobar/test_pytest.py . ====================== 1 passed in 0.01 seconds ====================== ~/test_min $
Hope this additional information will help.