Michael Xia
Michael Xia

Reputation: 458

Python: How to import modules that depends on other modules from another directory

This is my folder structure:

src
  file1.py
  file2.py
tests
  test1.py
#file1.py

from file2 import module2
modules = 'module1' + module2
#file2.py

module2 = 'module2'
#test1.py

import sys
sys.path.append('..')

from src.file1 import modules

print(modules)

I cannot "import modules from src.file1" because ModuleNotFoundError: No module named 'file2'.

How can I import modules from another folder where the module that I am importing also imports modules from other files?

Upvotes: 1

Views: 80

Answers (2)

knowingpark
knowingpark

Reputation: 749

put your directories (src and test) in a directory (path_problem)

change test1.py

#test1.py
from src.file1 import modules
print(f"in {__file__} with {modules}")

create a file called init.py and another called run.py in the path_problem diectory

#init.py
#create paths to all local directories

from pathlib import Path
import sys

here = Path(__file__).parent
sys.path.append(str(here))

for d in here.glob("*"):
    if d.is_dir():
        sys.path.append(str(d))
# run.py
import init

from test1 import modules
run run.py

You should see the output of the print statement in test1.py

Upvotes: 0

rioV8
rioV8

Reputation: 28673

with the following launch config I have it running

    {
      "name": "Python: Current File from src folder",
      "type": "python",
      "request": "launch",
      "program": "${file}",
      "cwd": "${workspaceFolder}/src"
    }

and a change to test1.py

import sys
try:
  # for editing
  sys.path.append('..')
  from src.file1 import modules
except ImportError:
  # for running
  sys.path.append('.')
  from file1 import modules

print(modules)

Upvotes: 1

Related Questions