4

my python folder structure is as follows

repository
  -libraries
     -image
        -imagefuncs.py
     -videos
        -videofuncs.py
     -text
        -textfuncs.py
  -docs
  -tests
     -test_imagefuncs.py

For the life of me i cannot figure out how I am supposed to test my functions defined in imagefuncs.py in test_imagefuncs.py

I cannot import the libraries folder in test_imagefuncs.py so none of those functions are visible to my testing code.

I'm using python3 and all i want to achieve is do py.test from my root repository folder and have all my tests execute without throwing import errors.

Is modifying the python path the only way to go about achieving this?

I want to achieve this without modifying the system path or python path

3
  • Write a setup.py and install the modules for testing. When setting up a new project I generally follow jeffknupp.com/blog/2013/08/16/…, or you could look into the cookiecutter project. Commented Aug 19, 2018 at 7:56
  • 2
    Possible duplicate of PATH issue with pytest 'ImportError: No module named YadaYadaYada' Commented Aug 19, 2018 at 8:59
  • 1
    Add an empty conftest.py into the repository dir, this should already suffice to adjust sys.path. Check out the answer in the linked question for more details. Commented Aug 19, 2018 at 9:04

1 Answer 1

1

Is modifying the python path the only way to go about achieving this?

Yes. One way or other, only paths in sys.path will be used.

modify PYTHONPATH is one way to just append paths to sys.path, any other way will do the same thing as adding paths to sys.path. The specific variation really depends on project.

e.g.

export PYTHONPATH='/opt/mybuild'

[tmp]$ python3.6 -m site
sys.path = [
'/tmp',
'/opt/mybuild', 
'/usr/lib64/python36.zip',
'/usr/lib64/python3.6',
'/usr/lib64/python3.6/lib-dynload',
'/home/joe/.local/lib/python3.6/site-packages',
'/usr/lib64/python3.6/site-packages',
'/usr/lib/python3.6/site-packages',
]
USER_BASE: '/home/joe/.local' (exists)
USER_SITE: '/home/joe/.local/lib/python3.6/site-packages' (exists)
ENABLE_USER_SITE: True
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.