When writing an application in python, it can be very convenient to be able to import a module from the top of your module tree. Eg. import myapp.config
instead of (python 2.5 only) relative imports: import ....config
. To do this one would have to make myapp
a package. The normal way to do this is to put your application directory (which now has to be named myapp
) somewhere in python’s package search path. This isn’t all to convenient.
The solution: manually set up your package module:
import os
import sys
import imp
def setup_virtual_package(name, path=os.curdir):
""" Sets up a package at the given path with a given
name """
modulePath = os.path.abspath(path)
f, fn, suffix = imp.find_module('__init__',
[modulePath])
imp.load_module(name, f, fn, suffix)
sys.modules[name].__path__ = [modulePath]
Now import myapp.something
works like a charm.