Tim Johnson <t...@akwebsoft.com> writes: > Using python 2.7~
In Python 2, you should turn on the “default import is absolute” by issuing the statement:: from __future__ import absolute_import as one of the first statements in each module. When you migrate your code to PYthon 3, that will be the default behaviour. > The packages is called 'controllers' and has a submodule named 'imp' To avoid the module named ‘imp’ in the standard library, your code should import ‘imp’ using a relative import. See PEP 328 <URL:https://www.python.org/dev/peps/pep-0328/#rationale-for-relative-imports>. So, you'd do:: from . import imp to import the ‘imp’ module relative to the current package. > I do the following: > >>> a = __import__('imp') It is best to avoid calling dunder functions directly; they are available for overriding the internals of language features, and *invoking* one is best done by just using the corresponding language feature. Instead, use either the ‘import’ statement, or the ‘importlib’ standard library module <URL:https://docs.python.org/2/library/importlib.html>, specifically the ‘importlib.import_module’ function:: import importlib a = importlib.import_module('.imp') > Now, suppose a python upgrade provides a package called controllers or > there's some great third-party package available called controllers. You don't even have to imagine that far: there is already a standard library module named ‘imp’, so you already have that problem to contend with :-) That is the distinction that led to “absolute” import versus “relative” import. > How do I access the 'global' controllers package? * Enable “default import is absolute”, as described above. * Issue a normal import statement: the absolute import search path will be used. I hope that helps. -- \ “[I]t is impossible for anyone to begin to learn that which he | `\ thinks he already knows.” —Epictetus, _Discourses_ | _o__) | Ben Finney -- https://mail.python.org/mailman/listinfo/python-list