构建用于简单导入的包
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
此包中的函数调用方式:
- 一个包名(声音)
- 一个文件名(wavread)
- 文件中定义的函数名称 (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')
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
此包中的函数调用方式:
- 一个包名(声音)
- 一个文件名(wavread)
- 文件中定义的函数名称 (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')