1

I have a project that is structured thus:

.
  |-dir
  |  |-subdir
  |  |  |-subsubdir1
  |  |  |-subsubdir2
  |  |  |-subsubdir3
  |  |  |-sub_sub_main.py
  |  |  |-other_relevant.py
  |  |-sub_main1.py
  |-dir2
  |  |-sub_main2.py
  |-main.py

Sometimes I need to import functions from other_relevant.py in main.py, sub_main1.py, sub_main2.py, and sub_sub_main.py. However, importing the script from different levels of the directory tree causes for the necessary import structure to change.

The code in other_relevant.py and sub_sub_main.py relies on code in other python files in subsubdir1, subsubdir2, and subsubdir3. When I change where I import those two files the import statements in all the python files in those subdirectories have to be changed.

If I run main.py or sub_main2.py which imports other_relevant.py, it requires the import in other_relevant.py to use from dir.subdir1.subsubdir1.file import ....

If I am running the sub_main.py script then the import statement becomes from subdir.subsubdir1.file import ...

If I run sub_sub_main.py then the import statement becomes from subsubdir1.file import ....

Since the file structure makes sense in terms of how to organize the files I don't want to really change that. Is there a way to manage the import statements so that I don't have to change all the import statements in the files in subdir depending on where I run sub_sub_main.py and other_relevant.py?

1 Answer 1

2

Set the env variable PYTHONPATH to your top folder path. Then all import statement will be made relative to this folder wherever you execute a python script. For instance from sub_main2.py you can do:

from dir.subdir.subdir3 import *

Setting up the env variable can be done by sourcing a sourceme.sh file located at the folder path. or directly in the .bashrc if only one project is used.

sample sourceme.sh:

export PYTHONPATH=`pwd -P`
Sign up to request clarification or add additional context in comments.

1 Comment

Could this be added to the bashrc file?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.