包与 __init__.py
通过合理的目录结构将模块组织成包。
包与 __init__.py 是 CoddyKit 上的免费 Python Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。
什么是包?
包是包含 __init__.py 文件和一个或多个模块的目录。Python 会将这样的目录视为可以从中导入内容的包。
mypackage/
__init__.py
utils.py
math_helpers.py__init__.py 文件
导入包时会运行 __init__.py。它可以为空,也可以向调用方公开选定的名称。
# mypackage/__init__.py
from .utils import helper
from .math_helpers import add从包中导入
使用点号表示法导入子模块,或导入 __init__.py 中定义的名称。
import mypackage
from mypackage import helper
from mypackage.math_helpers import add
print(add(2, 3))子包
包可以嵌套:包含自身 __init__.py 的子目录会成为子包。
mypackage/
__init__.py
network/
__init__.py
http.py相对导入
在包内部,可以使用以点号开头的相对导入来引用同级模块,而不必将包名称硬编码。
# mypackage/network/http.py
from ..utils import helper # two levels up绝对导入与相对导入
绝对导入含义明确,因此更受推荐。在大型包内部,相对导入有助于避免过长的名称。
# Absolute
from mypackage.utils import helper
# Relative (inside mypackage)
from .utils import helper__init__.py 中的 __all__
定义 __all__,即可控制 from package import * 导出的内容。
# mypackage/__init__.py
__all__ = ['helper', 'add']
from .utils import helper
from .math_helpers import add命名空间包(PEP 420)
Python 3.3 及更高版本支持命名空间包,即不包含 __init__.py 的目录。这适合将一个包拆分到多个目录中。
# No __init__.py needed
# Just have the directory and import normally
import myns.module包的 __init__ 初始化
使用 __init__.py 设置包级常量、配置日志记录,或延迟加载较大的子模块。
# mypackage/__init__.py
import logging
logging.getLogger(__name__).addHandler(logging.NullHandler())
VERSION = '1.0.0'分发包
添加 pyproject.toml 或 setup.py,即可让您的包能够使用 pip 安装。
# pyproject.toml excerpt
[project]
name = "mypackage"
version = "1.0.0"
# Install locally
# pip install -e .检查包属性
使用 __file__、__path__ 和 __name__,可以在运行时检查包的元数据。
import mypackage
print(mypackage.__file__) # path to __init__.py
print(mypackage.__path__) # list of directory paths
print(mypackage.__name__) # 'mypackage'快速检查
哪个文件会使一个目录成为 Python 包?
回顾
包使用 __init__.py 将模块组织到目录中。使用绝对导入可以提高可读性,在包内部使用相对导入,并使用 __all__ 控制公共接口。
常见问题解答
「包与 __init__.py」课时是免费的吗?
是的 — 「包与 __init__.py」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。
「包与 __init__.py」这节课中我会学到什么?
通过合理的目录结构将模块组织成包。 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Python Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「包与 __init__.py」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Python Academy 课中编写并运行代码吗?
能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 创建与导入模块
- Python 标准库
- 包与 __init__.py
- 使用 pip 安装包