By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,732 Members | 1,388 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,732 IT Pros & Developers. It's quick & easy.

import question

P: n/a
Question:
my src path looks like this:
src\root\sub1
src\root\sub2

My main code is in root, lets say main.py and there is also a lib.py.
In sub1 there if foo1.py and sub2 foo2.py

Sorry for the long introduction...please don't stop reading... :-(

In both sub1 and sub2 there is an empty __init__.py for making them a package.
Ok the problem:

this works fine:

main.py
from sub1 import foo1
from sub1 import foo2

However, in foo1 and foo2 I have this line "import lib".

So lib.py is not in the same path as foo1.py and foo2.py, it seems to find lib.py in a higher path.
(Reason for this is the import from main , which has lib.py in the same path?)

However, if I'm in the subfolders sub1 or sub2, and I run foo1.py or foo2.py standalone, they can't find lib.py. Yeah of course.

So, how to avoid this? How can I refer back to a module higher in the "hierarchical" path.
Up is so easy.. just say import foo.foo2.foo3. But up, what is the correct way of doing that?
Something to put in __init__.py, like sys.path.apppend('..')? Looks ugly to me....

Or, the way how I share lib for both files is wrong, please let me know.
Anyway, I need this behavior because of my unittest structure.

Thanks,
Vincent

Jul 18 '05 #1
Share this Question
Share on Google+
1 Reply


P: n/a
> So, how to avoid this? How can I refer back to a module higher in the "hierarchical" path.
Up is so easy.. just say import foo.foo2.foo3. But up, what is the correct way of doing that?
Something to put in __init__.py, like sys.path.apppend('..')? Looks ugly to me....


PEP 328, Relative imports should take care of your issue.

In the meantime...

#in main.py
import lib

#in foo1.py and foo2.py
import sys
lib = sys.modules['lib']
Now both of them will refer to the same 'lib' that main.py imported.

- Josiah
Jul 18 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.