tamasgal tamasgal - 4 months ago 29
Python Question

Hide external modules when importing a module (e.g. regarding code-completion)

The title is probably pretty bad and I'm sure something similar has been asked before, but I could not find a solution for this (also I'm new to python…).

I have several modules in one package (a kind of a toolkit), which I use in my projects. The structure looks like this:

the_toolkit:
__init__.py
basic_io.py
simple_math.py
matrix_kit.py
...


Now when I use
IPython
or the code completion in
VIM
after importing a module from the package with

from the_toolkit import matrix_kit


I get a bunch of modules/functions which
matrix_kit.py
imports (
array
,
math
,
log
,
loggin
,
format_exc
, etc.), along with the actual functions which
matrix_kit
defines.
How can I filter out everything else, since I'm not interested in
math
or
array
in a code completion of the
matrix_kit
module?

The
__init__.py
is empty as suggested by many pythonistas, or is it the way to do it?

Answer

I had the same problem, and solved it by adding a leading underscore to all my imports. It doesn't look brilliant, but it achieves what you're after.

from __future__ import division as _division
import numpy as _np
import pandas as _pd

Only the stuff that starts without an underscore is imported when you import the module using from .. import *. or when you use tab-completion in IPython or spyder.