构建用于简单导入的包

Constructing a package for simple imports

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 ) 给包用户?可以创建一个 "package",它是一个包含其所有功能的单个文件,但一个巨大的文件不是很模块化。 Python构建复杂包以方便使用和维护的 ic 方法是什么?

所需用户代码:

import sound

sf = sound.read_wav('foo')

__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')