Python Import Class With Same Name as Directory

import, importerror, python

Solution

The actual problem you are having, using a single import, is due to the packages having the precedence over modules:

Note that when using `from package import item`, the item can be either a submodule (or subpackage) of the package, or some other name defined in the package, like a function, class or variable. The `import` statement first tests whether the item is defined in the package; if not, it assumes it is a module and attempts to load it. If it fails to find it, an `ImportError` exception is raised.

Anyway I'd strongly suggest to rename the file or the directory since you cannot import more than one module with a given name. The problem occurs because each module/package object is stored into `sys.modules`, which is a simple `dict` and thus it cannot contain multiple equal keys.

In particular, assuming `foo.py` and the `foo` directory are in different directories(and if they aren't you still can't import `foo.py`), when doing:

from foo import gaz

It will load `foo.py` and put the module into `sys.modules`, then trying to do:

from foo.bar import wakaka

Will fail because the import tries to use the module `foo.py` instead of the package.

The opposite happens if you first import `foo.bar`; the imports will use the package instead of the module.

Problem

Lets say I have the following python source file layout: ``` lib/foo.py lib/foo/bar.py ``` and then in my source code: ``` from foo import gaz ``` I get an import error: ``` ImportError: No module named foo ``` How can I have a .py file and a directory with the same name so I can do the following: ``` from foo import gaz from foo.bar import wakawaka ```

Original source

Related problems