导入模块时隐藏外部模块(例如,关于代码完成)

tam*_*gal 20 python python-import code-completion

我在一个包中有一些模块(一种工具包),我在我的项目中使用它.结构如下所示:

the_toolkit:
    __init__.py
    basic_io.py
    simple_math.py
    matrix_kit.py
    ...
Run Code Online (Sandbox Code Playgroud)

现在当我从包中导入模块后使用IPython或代码完成VIM

from the_toolkit import matrix_kit
Run Code Online (Sandbox Code Playgroud)

我得到一堆模块/功能,其matrix_kit.py进口(array,math,log,loggin,format_exc,等等),与该实际功能一起matrix_kit限定.我怎样才能否则过滤掉一切,因为我不感兴趣,matharray在的代码完成matrix_kit模块?

__init__.py许多pythonistas建议这是空的,还是这样做的?

jko*_*ian 18

我遇到了同样的问题,并通过在我的所有导入中添加一个前导下划线来解决它.它看起来并不精彩,但它实现了你所追求的目标.

from __future__ import division as _division
import numpy as _np
import pandas as _pd
Run Code Online (Sandbox Code Playgroud)

使用from .. import*导入模块时,仅导入没有下划线的内容.或者在IPython或spyder中使用制表符完成时.


Eli*_*igo 8

我喜欢并使用这种方法.从您的项目结构开始,我们将隐藏matrix_kit您不想显示的所有内容.

the_toolkit:
    __init__.py
    basic_io.py
    simple_math.py
    matrix_kit.py
    ...
Run Code Online (Sandbox Code Playgroud)

移动matrix_kit.py到具有相同名称的包中,并在模块名称的开头放置一个下划线:

the_toolkit:
    __init__.py
    basic_io.py
    simple_math.py
    matrix_kit:
        __init__.py
        _matrix_kit.py
    ...
Run Code Online (Sandbox Code Playgroud)

现在在_matrix_kit.py中添加一个全局变量,_matrix_kit.py列出要显示的所有函数/类/变量的名称.然后在matrix_kit/init .py中添加以下行:

from ._matrix_kit import *
Run Code Online (Sandbox Code Playgroud)

它只会导入__all__ = [...]模块属性中列出的东西.然后,在导入matrix_kit/__init__.py之前,您将实际导入__all__其内容.