Как использовать __init__.py для создания чистого API?Python

Программы на Python
Ответить
Anonymous
 Как использовать __init__.py для создания чистого API?

Сообщение Anonymous »

Описание проблемы:
Я пытаюсь создать локальный API для своей команды. Думаю, я в общих чертах понимаю механику _init_.py. Допустим, у нас есть следующая структура пакета:

Код: Выделить всё

API/
├── __init__.py         # Top-level package init file
└── core/
├── __init__.py     # Core module init file
├── calculator.py
└── exceptions.py
Теперь, если я создам свой API с пустыми файлами _init_.py, а затем импортирую API в свой скрипт, я не смогу что-то сделать нравится:

Код: Выделить всё

import API
API.core
API.core.calculator
Потому что подмодули специально не импортировались. Что мне нужно сделать, так это добавить следующее в мой _init_.py верхнего уровня:

Код: Выделить всё

from . import core
И следующее в моем основном модуле _init_.py:

Код: Выделить всё

from . import calculator
from . import exceptions
Теперь, когда я это делаю, весь импорт, который я делаю в своем калькуляторе.py или исключениях.py, например numpy или pandas, фактически доступен через мой пакет следующим образом:

Код: Выделить всё

API.core.calculator.numpy
Вопрос 1. Как лучше всего запретить отображение импортированных библиотек через мой API?
В той же теме предположим, что я хочу получить доступ к моим функциям калькулятора.py напрямую через ключевое слово core (предположим, что _все_ переменные безопасно настроены). Затем я могу добавить следующее в свой основной модуль _init_.py

Код: Выделить всё

from .calculator import *
from .exceptions import *
что позволяет мне сделать:

Код: Выделить всё

API.core.my_function()
Но опять же, я также могу одновременно вызвать API.core.calculator.my_function(), что может сбить с толку пользователей.
2. Как предотвратить доступность импортированных функций как через имя моего пакета, так и через имя модуля?
Я пробовал смешивать подходы, но безрезультатно, пожалуйста, помогите!

Подробнее здесь: https://stackoverflow.com/questions/791 ... -clean-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»