из пакета импорта * как _ - PullRequest
       10

из пакета импорта * как _

0 голосов
/ 14 декабря 2018

В моем проекте есть ряд click функций, которые импортируются в мою точку входа с помощью:

import package.module as _

, однако я реализую папку plugins, которая позволяет пользовательскому коду подключаться кта же утилита.package/plugins/__init__.py динамически заполняет его __all__, поэтому я могу from package.plugins import *.

Я не особо хочу, чтобы все эти имена загрязняли мое пространство имен, хотя я использую импорт только для его побочных эффектов.Есть ли способ до import * as _?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Если вы используете import * для побочных эффектов, характерных для import * ... что ж, это довольно странная вещь, но вы можете использовать __import__ с fromlist=['*'] для выполнения этих побочных эффектовбез загрязнения пространства имен:

__import__('package', fromlist=['*'])

Это автоматически загрузит все подмодули в списке __all__ пакета, в отличие от простого import package.

0 голосов
/ 15 декабря 2018

Если вы не хотите, чтобы содержимое модуля загрязняло вашу программу, вы можете просто импортировать модуль:

import module

или импортировать как:

import module as name

import * предназначен для случаев, когда вы не хотите, чтобы модуль находился в своем собственном пространстве имен.Делая это:

from module import *

автоматически помещает все, начиная с module, в область, в которой находится импорт (обычно это глобальная область).from module import * - это специальный тип from module import something, который импортирует только указанное содержимое в вашу программу.

Помните, что подмодули можно импортировать так же, как и обычные модули, т. Е. import os.path as somemodule допустимо.

...