You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
IMPORT PROBLEM: Local submodule shadows global module #42852
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee=Noneclosed_at=<Date2006-02-17.12:13:09.000>created_at=<Date2006-02-01.14:48:37.000>labels= ['interpreter-core']
title='IMPORT PROBLEM: Local submodule shadows global module'updated_at=<Date2006-02-17.12:13:09.000>user='https://bugs.python.org/jensengel'
Local sister modules seem to hide global ones (of the
standard Python library) when import occurs in a
submodule. This statement even holds for indirect
imports from the standard Python library.
I have not found a work-around that let me decide if I
want to import the global module or the local one. The
only solution seens to be to relocate the module
where "__main__" is used to another place where no
such import conflict occurs.
If my analysis is correct, the "main" module provides
another ROOT filesystem for Python libraries that is
normally preferred over the PYTHONHOME filesystem.
If this is true, module names at this level must be
UNIQUE in a GLOBAL namespace (that is only partly
under my control) which I consider BAD.
NOTE: In C++ if have the "::" prefix to indicate that
I want to use the global/default namespace (=module)
and not a sub-namespace. I am not aware of such a idom
in Python.
Activity
jensengel commentedon Feb 1, 2006
PYTHON: 2.3, 2.4
PLATFORMS: Solaris, Linux, Cygwin, Win32
Local sister modules seem to hide global ones (of the
standard Python library) when import occurs in a
submodule. This statement even holds for indirect
imports from the standard Python library.
FILE STRUCTURE for EXAMPLES:
+-- __init__.py
+-- main.py
+-- main2.py
+-- symbol.py
\-- types.py
EXAMPLE 1: Local submodule shadows global one.
# -- file:my.main.py
# COMMAND-LINE: python my/main.py
# MY INTENTION: Import standard module "types".
import types #< FAILURE: Imports my.types
EXAMPLE 2: Indirect import uses "my.symbol" instead.
# -- file:my.main2.py
# COMMAND-LINE: python my/main2.py
# MY INTENTION: Import standard module "compiler".
# NOTE: Module "compiler" imports module "symbol"
import compiler #< FAILURE: Imports my.symbol instead
I have not found a work-around that let me decide if I
want to import the global module or the local one. The
only solution seens to be to relocate the module
where "__main__" is used to another place where no
such import conflict occurs.
If my analysis is correct, the "main" module provides
another ROOT filesystem for Python libraries that is
normally preferred over the PYTHONHOME filesystem.
If this is true, module names at this level must be
UNIQUE in a GLOBAL namespace (that is only partly
under my control) which I consider BAD.
NOTE: In C++ if have the "::" prefix to indicate that
I want to use the global/default namespace (=module)
and not a sub-namespace. I am not aware of such a idom
in Python.
birkenfeld commentedon Feb 17, 2006
Logged In: YES
user_id=1188172
This is, unfortunately, correct behavior. Python 2.5 will
hopefully fix this with new import semantics for relative
imports.
As a workaround, don't call your modules like global ones
when you need those.