Создание пакета для простого импорта - PullRequest
1 голос
/ 30 апреля 2020

Стандартная библиотека Python имеет функции, предназначенные для простого импорта и использования. например:

import re
m = re.search('foo')

Документация пакета https://docs.python.org/3/tutorial/modules.html#packages имеет пример макета подпакета. Но давайте упростим, чтобы иметь только один пакет без подпакетов:

sound/                  Top-level package
    __init__.py               Initialize the sound package
    wavread.py
    wavwrite.py
    ...

Наш гипотетический wavread.py определяет функцию:

def read_wav(name):
    return 'Hello ' + name

Функции в этом пакете вызываются с помощью:

  1. имя пакета (звук)
  2. имя файла (wavread)
  3. имя функции, определенное в файле (read_wav ())

например:

import sound.wavread

sf = sound.wavread.read_wav('foo')

или:

import sound.wavread as sound

sf = sound.read_wav('foo')

Вопрос: Как создать пакет, чтобы его можно было импортировать как и используется просто, без предоставления python имен файлов (например, wavread) пользователю пакета? Можно создать «пакет», представляющий собой один файл, содержащий все его функции, но один огромный файл не очень модульный. Как Pythoni c позволяет структурировать сложный пакет для простоты использования и обслуживания?

Требуемый код пользователя:

import sound

sf = sound.read_wav('foo')

1 Ответ

4 голосов
/ 30 апреля 2020

in __init__.py делает следующее:

from .wavread import * #or only the functions you want to export from  wavread.py
from .wavwrite import *
# and so on for all files that implement function of the sound module

Таким образом, пользователь звукового модуля может делать: from sound import * или from sound import read_wav или

import sound
# ...
sf = sound.read_wav('foo')
...