Скрыть внешние модули при импорте модуля (например, в отношении завершения кода) - программирование
Подтвердить что ты не робот

Скрыть внешние модули при импорте модуля (например, в отношении завершения кода)

У меня есть несколько модулей в одном пакете (своего рода набор инструментов), который я использую в своих проектах. Структура выглядит следующим образом:

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

Теперь, когда я использую IPython или завершение кода в VIM после импорта модуля из пакета с

from the_toolkit import matrix_kit

Я получаю кучу модулей/функций, которые matrix_kit.py импортирует (array, math, log, loggin, format_exc и т.д.) вместе с фактическими функциями, которые matrix_kit определяет. Как я могу отфильтровать все остальное, так как меня не интересует math или array в завершении кода модуля matrix_kit?

__init__.py пуст, как было предложено многими pythonistas, или это способ сделать это?

4b9b3361

Ответ 1

У меня была такая же проблема, и я решил ее, добавив главный подчеркивание ко всем моим импортам. Он не выглядит блестящим, но он достигает того, что вам нужно.

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

Только материал, который начинается без подчеркивания, импортируется при импорте модуля с использованием.. import *. или когда вы используете табуляцию в IPython или spyder.

Ответ 2

Я пришел, чтобы полюбить и использовать этот подход. Начиная со структуры вашего проекта, мы будем скрывать весь контент matrix_kit который вы не хотите показывать.

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

Переместите matrix_kit.py в пакет с тем же именем и поместите одно подчеркивание в начале имени модуля:

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

Теперь в _matrix_kit.py добавьте глобальную переменную __all__ = [...] перечислены имена всех функций/классов/переменных, которые вы хотите видеть. Затем добавьте следующую строку в matrix_kit/__init__.py:

from ._matrix_kit import *

Он будет импортировать только то, что указано в __all__ модуля. Затем, импортируя matrix_kit как вы делали раньше, вы фактически импортируете __init__.py и его содержимое.

Ответ 3

вы можете получить пробег из __all__