17

I am still getting my head around the import statement. If I have 2 folders in the same level:

  1. src
  2. test

How to make the py files in test import the modules in src? Is there a better solution (like put a folder inside another?)

1

3 Answers 3

10

The code you want is for using src/module_name.py

from src import module_name 

and the root directory is on your PYTHONPATH e.g. you run from the root directory

Your directory structure is what I use but with the model name instead from src. I got this structure from J Calderone's blog and

Sign up to request clarification or add additional context in comments.

7 Comments

can packages(folders) have underscores in the middle of the name?
Also, make sure that the src directory is a package, by adding a __init__.py file.
I was adding the src directory to the PYTHONPATH, instead of the ROOT path.
Jader yes adding src to PYTHONPATH does work - but then you end up with many entries and make it difficult to manage. If you run from the root of your project you do not need to alter your environment
You can have _ in folder names but it is not good style (see PEP8) I just used that to try to have self documenting code here.
|
6

Try this out:

import sys import os sys.path.append(os.path.join('..', 'src')) import module_in_src_folder 

edited to support any platform

1 Comment

Downvoted because this involves messing with PYTHONPATH.
0

I have exactly the same situation as the OP with all the python projects I write:

  • Project Folder
    1. src
    2. test

All modules, whether in src, or test, or subfolders of these always use the form of import that Mark shows in his answer:

from src import module_name 

What I have done is write a module that sits in Project Folder and recursively discovers all the test modules within the test folder and gets unittest to run all those tests. As python is running in Project Folder, then modules are relative to the working directory.

This means that the tests are just like any other client that wants to modules from src.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.