# Python importing nightmare

I'm having the hardest time trying to import a few things. I have an addon that has multiple files all under one folder with an __init__.py in the base. I'm performing all of these imports from this __init__.py. The addon folder resides in my addon folder as scripts/addons/RLD_Toolkit

My directory hierarchy looks like this

The part of the script where it errors

def register():
#These imports do not work
from . import rld_panel
import rld_panel

#This import does work
import RLD_Toolkit.rld_panel


The error I'm getting is

Import Error: cannot import name rld_panel


Why won't it perform the relative imports (or even the straight up import) from my __init__.py?

Edit: Here's a printout of my globals() variables and sys.path

• My guess: Blender screws up the pythonpath. Print it and see if it makes sense. – Mörkö Sep 5 '15 at 6:08
• @user277143 Updated post with printout of globals and sys.path – Coburn Sep 5 '15 at 6:13
• As you can see, the folder you are in isn't in the import path. As addons is in the python path, saying import RLD_Toolkit.rld_panel imports from the module (that is the whole folder with your init.py) the file rld_panel.py. I would advise you to add the current folder into the path. – Mörkö Sep 5 '15 at 6:15
• I'm confused? You're talking about __path__ right? That's the folder with all my stuff in it. – Coburn Sep 5 '15 at 6:16
• Nope. path is the path of the file. When you try to import things, python looks in sys.path, which doesn't contain the folder. – Mörkö Sep 5 '15 at 6:18

## 1 Answer

To answer the question, you will have to add the line:

sys.path.append(__path__)


before importing anything. This will add the current folder into the path Python looks in for imports. Then you can import files with:

import foo


instead of:

from bar import foo


.

• This fixes it. Can you provide any insight as to why this won't work for me yet I have two other addons that perform normal relative imports and it works? Python + Blender is kind of a mystery to me sometimes so some speculation on the inner workings would be helpful to know. – Coburn Sep 5 '15 at 6:26
• No living being can hope to understand what happens inside Blender. Turn around, mortal. Your quest is hopeless. – Mörkö Sep 5 '15 at 6:28
• I need to publish an update to this with code samples, through browsing the Blender Python bindings and trial and error, I've kind of come up with a home brew relative import system that even supports reloading (as long as your code is written in a specific way that doesn't reuse globals and unregisters everything properly). – Coburn Dec 15 '17 at 18:21