例如,Python标准库中的函数被设计成可以简单地导入和使用。
import re
m = re.search('foo')
包的文档中 https:/docs.python.org3tutorialmodules.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
在这个包中的函数被调用的时候需要用到:
比如说:
import sound.wavread
sf = sound.wavread.read_wav('foo')
或者:
import sound.wavread as sound
sf = sound.read_wav('foo')
问题。 应该如何创建一个包,使其既能导入又能简单使用,而不需要向包用户暴露python文件名(如, wavread
)的文件名? 可以创建一个 "包",就是一个文件,包含所有的功能,但是一个巨大的文件并不是很模块化。 什么是Pythonic的方式来结构一个复杂的包,既方便使用又方便维护?
希望用户的代码。
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')