<div dir="ltr"><div><div><div><div><div><div>I'm converting some tests written earlier for Unittest and am having trouble with import statements when running them with Pytest. <br><br></div>As an example, in the older code the module <span style="font-family:monospace,monospace">create.py</span> in directory <span style="font-family:monospace,monospace">lib</span> might be imported as<br><br></div><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><span style="font-family:monospace,monospace">import lib.create</span><br></blockquote><br></div>but this syntax usually raises errors when I run the code with Pytest.<br><br>I'd appreciate any advice. Details and minimal examples below.<br><br></div></div>1. I am in the directory <span style="font-family:monospace,monospace">temp</span>:<br><br><span style="font-family:monospace,monospace">temp/<br>    lib/<br>        __init__.py<br>        create.py<br>    tests/<br>        test_caller.py</span><br><br><br><br>2. File <span style="font-family:monospace,monospace">__init__.py</span> is empty. The other two files are as follows:<br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><span style="font-family:monospace,monospace"># test_caller.py</span><br><span style="font-family:monospace,monospace"></span><br><span style="font-family:monospace,monospace">import lib.create</span><br><span style="font-family:monospace,monospace"></span><br><span style="font-family:monospace,monospace">def test_show():</span><br><span style="font-family:monospace,monospace">    assert True</span><br></blockquote><br></div>and<br><div><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><span style="font-family:monospace,monospace"># create.py</span><br><span style="font-family:monospace,monospace"></span><br><span style="font-family:monospace,monospace">def create():</span><br><span style="font-family:monospace,monospace">    pass</span><br><span style="font-family:monospace,monospace"></span></blockquote><br><br><br>3. Running Pytest from within temp typically generates an <span style="font-family:monospace,monospace">ImportError</span>:<br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><span style="font-family:monospace,monospace">$ py.test tests</span><br><span style="font-family:monospace,monospace">============================= test session starts ==============================</span><br><span style="font-family:monospace,monospace">platform darwin -- Python 2.7.6 -- py-1.4.26 -- pytest-2.7.0</span><br><span style="font-family:monospace,monospace">rootdir: .../temp/tests, inifile: </span><br><span style="font-family:monospace,monospace">collected 0 items / 1 errors </span><br><span style="font-family:monospace,monospace"></span><br><span style="font-family:monospace,monospace">==================================== ERRORS ====================================</span><br><span style="font-family:monospace,monospace">_______________________ ERROR collecting test_caller.py ________________________</span><br><span style="font-family:monospace,monospace">tests/test_caller.py:3: in <module></span><br><span style="font-family:monospace,monospace">    import lib.create</span><br><span style="font-family:monospace,monospace">E   ImportError: No module named lib.create</span><br><span style="font-family:monospace,monospace">=========================== 1 error in 0.01 seconds ============================</span><br><span style="font-family:monospace,monospace"></span></blockquote><br><br><br>4. I have tried updating the <span style="font-family:monospace,monospace">sys.path</span> list in <span style="font-family:monospace,monospace">test_caller.py</span>:<br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><span style="font-family:monospace,monospace">import sys</span><br><span style="font-family:monospace,monospace">sys.path.append('lib')</span><br><span style="font-family:monospace,monospace"></span></blockquote><br>or<br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><span style="font-family:monospace,monospace">sys.path.extend(['..', 'lib'])</span><br></blockquote><br>but the result is the same.<br><br></div><div>Thanks for any suggestions as to how to deal with this.<br></div></div>