Python: import the containing package
Solution 1
Also, starting in Python 2.5, relative imports are possible. e.g.:
from . import foo
Quoting from http://docs.python.org/tutorial/modules.html#intra-package-references:
Starting with Python 2.5, in addition to the implicit relative imports described above, you can write explicit relative imports with the from module import name form of import statement. These explicit relative imports use leading dots to indicate the current and parent packages involved in the relative import. From the surrounding module for example, you might use:
from . import echo
from .. import formats
from ..filters import equalizer
Solution 2
This doesn't exactly answer your question, but I'm going to suggest that you move the function outside of the __init__.py
file, and into another module inside that package. You can then easily import that function into your other module. If you want, you can have an import statement in the __init__.py
file that will import that function (when the package is imported) as well.
Solution 3
If the package is named testmod
and your init file is therefore testmod/__init__.py
and your module within the package is submod.py
then from within submod.py
file, you should just be able to say import testmod
and use whatever you want that's defined in testmod.
Solution 4
I'm not totally sure what the situation is, but this may solve your "different name" problem:
import __init__ as top
top.some_function()
Or maybe?:
from __init__ import some_function
some_function()
Admin
Updated on April 27, 2020Comments
-
Admin about 4 years
In a module residing inside a package, i have the need to use a function defined within the
__init__.py
of that package. how can i import the package within the module that resides within the package, so i can use that function?Importing
__init__
inside the module will not import the package, but instead a module named__init__
, leading to two copies of things with different names...Is there a pythonic way to do this?
-
Admin over 15 yearsi realise i can do this, it just seems rather messy and um, unpythonic.
-
cdleary over 15 years+1 - using a
common.py
within your package is very usual practice in Python. -
dwc over 14 yearsI've been messing around and haven't found any better way
-
Ar5hv1r almost 12 yearsThis does work, but at least in cPython 2.7 the interpreter considers
__init__
to be a different module thantop
, and so the__init__.py
file gets loaded twice. -
BrenBarn about 10 yearsThis does not answer the question of how to import from
__init__.py
. -
habnabit over 9 yearsThis is an implicit relative import, and as such won't work in python 3, and is bad practice in python 2 anyway.
-
Martijn Pieters over 9 years@BrenBarn: yet this is the way to import it; when you import the package, the
__init__.py
file serves as the effective namespace. You should never import__init__.py
directly. -
Martijn Pieters over 9 yearsThis still creates
sys.modules['__init__']
. Basically, the__init__.py
module should never be directly imported. Import the package (the directory name) instead.