Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python in VS Code: Error when importing module from subfolder

I recently started exploring VS Code for developing Python code and I’m running into an issue when I try to import a module from a subfolder. The exact same code runs perfectly when I execute it in a Jupyter notebook (the subfolders contain the __init__.py files etc.) I believe I followed the instructions for setting up the VS Python extension correctly. Everything else except this one import command works well, but I haven’t been able to figure what exactly is going wrong.

The structure of the project is as follows: The root folder, which is set as the cwd contains two subfolders (src and bld). src contains the py-file that imports a module that is saved in foo.pyin the bld-folder using from bld.foo import foo_function

When running the file, I get the following error: ModuleNotFoundError: No module named ‘bld'. I have several Anaconda Python environments installed and get the same problem with each of them. When copying foo.py to the src directory and using from foo import foo_function everything works.

My launch.json file is as follows:

{
    "version": "0.2.0",
    "configurations": [

        {
            "name": "Python: Current File (Integrated Terminal)",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "cwd": "${workspaceFolder}",
            "env": {"PYTHONPATH": "${workspaceFolder}:${workspaceFolder}/bld"},
            "console": "integratedTerminal"
        }
    ]
}

Any ideas or help would be greatly appreciated!

like image 792
Stefan Avatar asked Sep 01 '25 04:09

Stefan


1 Answers

Stefan‘s method worked for me.

Taking as example filesystem: workspaceFolder/folder/subfolder1/subfolder2/bar.py

I wasn't able to import subfolders like: from folder.subfolder1.subfolder2 import bar It said: ModuleNotFoundError: No module named 'folder'

I added to .vscode/settings.json the following:

"terminal.integrated.env.osx": {
        "PYTHONPATH": "${workspaceFolder}"
    }

I also added at the beginning of my code:

import sys
#[... more imports ...]
sys.path.append(workspaceFolder)
# and then, the subfolder import:
from folder.subfolder1.subfolder2 import bar

Now, it works.

Note: all my folders and subfolders have an empty file named __init__.py. I still had to do the steps described above. VSCode version: 1.52.0 (from 10-dec-2020)

like image 172
Gabriel Metola Avatar answered Sep 02 '25 19:09

Gabriel Metola