/foo/bar/bar.py that, for whatever, needs to import Foo from the parent directory in /foo/foo.py. How does /foo/bar/bar.py import from /foo/foo.py?Option 1. Put
/foo in PYTHONPATH.Option 2. Turn both the
/foo and /foo/bar directories into packages. Stick an __init__.py file in /foo and stick another __init__.py file in /foo/bar. You've then got a pair of packages, one containing the other. Relative import from .. foo import Foo syntax will now work in /foo/bar/bar.py provided that you import /foo/bar/bar.py as a package and do not execute /foo/bar/bar.py from the commandline as a script. This last bit got me. Kept getting Attempted relative import in non-package exceptions.Option 3. Stick
/foo in sys.path, use plain old from foo import Foo syntax, and then rip /foo back out of sys.path. At the top of bar you can have, for example
import sys
sys.path.insert(1, '/foo')
from foo import Foo
sys.path.remove('/foo')
...
This works because
sys.path is just a list.
No comments:
Post a Comment