Другие пакеты доступны на вкладке моего пакета - PullRequest
0 голосов
/ 06 сентября 2018

Когда я импортирую созданный мной пакет Python 3, завершение вкладки для пакета включает в себя некоторые пакеты, которые импортируются моим пакетом из других пакетов, таких как pandas.

Пакет имеет следующую базовую структуру:

foo/
    foo/
    __init__.py
    bar.py
    baz.py
    qux.py
    setup.py

My __init__.py содержит

from .bar import *
from .baz import *
from .qux import *

Проблема в том, что baz.py выглядит следующим образом

import pandas as pd

def f1(data):
    # do something with pandas (pd)

def f2(data):
    # do something different with pandas (pd)

Таким образом, когда I import foo,Я получаю опции завершения табуляции, такие как foo.pd, что на самом деле не является действительным.Для всех foo.X я хочу, чтобы X была функцией или классом, определенным мной, а не импортированным из другого пакета.

Как лучше всего это обойти?Должен ли я добавить import pandas as pd к __init__.py?Я знаю, что могу import pandas as pd внутри каждой отдельной функции, но это кажется излишним для чего-то большего, чем просто тривиальный пример, подобный этому.

Это просто проблема с завершением табуляции Jupyter?

1 Ответ

0 голосов
/ 07 сентября 2018

Установите __all__ в вашем __init__.py, чтобы определить, что должно быть выставлено, когда вы import * от вашего модуля:

Единственное решение для автора пакета - предоставить явный индекс пакета. В операторе import используется следующее соглашение: если код пакета __init__.py определяет список с именем __all__, он считается списком имен модулей, которые следует импортировать, если from package import * встречается. Автор пакета должен поддерживать этот список в актуальном состоянии после выпуска новой версии пакета.

Например:

__all__ = ["stuff", "you", "want", "to", "expose"]

Кроме того, вы можете import pandas as _pd, так как имена, начинающиеся с _, не будут импортированы по умолчанию .

...