开发 Python 包
James Fulton
Climate informatics researcher
import mysklearn
help(mysklearn.preprocessing)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'mysklearn' has no
attribute 'preprocessing'
包含子包的包目录结构
mysklearn/
|-- __init__.py
|-- preprocessing
| |-- __init__.py
| |-- normalize.py
| |-- standardize.py
|-- regression
| |-- __init__.py
| |-- regression.py
|-- utils.py
import mysklearn.preprocessing
help(mysklearn.preprocessing)
Help on package mysklearn.preprocessing in
mysklearn:
NAME
mysklearn.preprocessing - A subpackage
for standard preprocessing operations.
包含子包的包目录结构
mysklearn/
|-- __init__.py
|-- preprocessing
| |-- __init__.py
| |-- normalize.py
| |-- standardize.py
|-- regression
| |-- __init__.py
| |-- regression.py
|-- utils.py
import mysklearn.preprocessing
help(mysklearn.preprocessing.normalize)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module
'mysklearn.preprocessing' has no attribute
'normalize'
包含子包的包目录结构
mysklearn/
|-- __init__.py
|-- preprocessing
| |-- __init__.py
| |-- normalize.py
| |-- standardize.py
|-- regression
| |-- __init__.py
| |-- regression.py
|-- utils.py
import mysklearn.preprocessing.normalize
help(mysklearn.preprocessing.normalize)
Help on module mysklearn.preprocessing.normalize
in mysklearn.preprocessing:
NAME
mysklearn.preprocessing.normalize - A module
for normalizing data.
包含子包的包目录结构
mysklearn/
|-- __init__.py
|-- preprocessing
| |-- __init__.py
| |-- normalize.py
| |-- standardize.py
|-- regression
| |-- __init__.py
| |-- regression.py
|-- utils.py
mysklearn/__init__.py
绝对导入
from mysklearn import preprocessing
相对导入
from . import preprocessing
包含子包的包目录结构
mysklearn/
|-- __init__.py <--
|-- preprocessing
| |-- __init__.py
| |-- normalize.py
| |-- standardize.py
|-- regression
| |-- __init__.py
| |-- regression.py
|-- utils.py
我们把 preprocessing 导入了 mysklearn
import mysklearn
help(mysklearn.preprocessing)
Help on package mysklearn.preprocessing in
mysklearn:
NAME
mysklearn.preprocessing - A subpackage
for standard preprocessing operations.
但 preprocessing 尚未关联到 normalize
import mysklearn
help(mysklearn.preprocessing.normalize)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module
'mysklearn.preprocessing' has no attribute
'normalize'
mysklearn/preprocessing/__init__.py
绝对导入
from mysklearn.preprocessing import normalize
相对导入
from . import normalize
包含子包的包目录结构
mysklearn/
|-- __init__.py
|-- preprocessing
| |-- __init__.py <--
| |-- normalize.py
| |-- standardize.py
|-- regression
| |-- __init__.py
| |-- regression.py
|-- utils.py
import mysklearn
help(mysklearn.preprocessing.normalize.normalize_data)
Help on function normalize_data in module
mysklearn.preprocessing.normalize:
normalize_data(x)
Normalize the data array.
mysklearn/preprocessing/__init__.py
绝对导入
from mysklearn.preprocessing.normalize import \
normalize_data
相对导入
from .normalize import normalize_data
包含子包的包目录结构
mysklearn/
|-- __init__.py
|-- preprocessing
| |-- __init__.py <--
| |-- normalize.py
| |-- standardize.py
|-- regression
| |-- __init__.py
| |-- regression.py
|-- utils.py
import mysklearn
help(mysklearn.preprocessing.normalize_data)
Help on function normalize_data in module
mysklearn_imp.preprocessing.normalize:
normalize_data(x)
Normalize the data array.
在 normalize.py 中
绝对导入
from mysklearn.preprocessing.funcs import (
mymax, mymin
)
相对导入
from .funcs import mymax, mymin
包含子包的包目录结构
mysklearn/
|-- __init__.py
|-- preprocessing
| |-- __init__.py
| |-- normalize.py <--
| |-- funcs.py
| |-- standardize.py
|-- regression
| |-- __init__.py
| |-- regression.py
|-- utils.py
自定义异常 MyException 在 utils.py 中
在 normalize.py、standardize.py 和 regression.py 中
绝对导入
from mysklearn.utils import MyException
相对导入
from ..utils import MyException
包含子包的包目录结构
mysklearn/
|-- __init__.py
|-- preprocessing
| |-- __init__.py
| |-- normalize.py <--
| `-- standardize.py <--
|-- regression
| |-- __init__.py
| |-- regression.py <--
`-- utils.py
from . import modulemodulefrom .. import modulemodulefrom .module import function functionfrom ..subpackage.module import functionfunction开发 Python 包