Python包的入口设置依赖__init__.py、__main__.py和pyproject.toml:1. __init__.py使目录成为包,可定义导入内容;2. __main__.py支持python -m运行包;3. pyproject.toml配置scripts实现命令行工具。
Python 包的入口文件设置主要通过 __init__.py 和 __main__.py 两个特殊文件来实现,用途不同,下面分别说明。
1. __init__.py:定义包的导入行为
当你希望一个目录被识别为 Python 包时,需要在该目录下创建 __init__.py 文件(可以为空)。这个文件会在你导入该包时自动执行。
你可以在这个文件中:
- 定义包级别的变量、函数或类
- 导入子模块,方便用户从包直接访问
- 设置默认行为
例如目录结构:
my_package/
__init__.py
module_a.py
在 __init__.py 中写入:
from .module_a import some_function
__version__ = "0.1.0"
这样用户就可以直接使用:
import my_package
my_package.some_function()
2. __main__.py:让包可直接运行
如果你想通过 python -m pack 来运行整个包(比如做 CLI 工具或测试),就需要在包根目录下添加 __main__.py 文件。
age_name
Python 在执行 python -m my_package 时,会查找 my_package/__main__.py 并运行它。
示例:
my_package/
__init__.py
__main__.py
module_a.py
在 __main__.py 中写入:
from .module_a import main
if __name__ == "__main__":
main()
然后在终端运行:
python -m my_package
就会执行 __main__.py 的内容。
3. setup.py 或 pyproject.toml(用于安装和命令行入口)
如果你要把包发布或希望提供命令行工具(如输入 mycmd 直接运行),可以在 setup.py 或 pyproject.toml 中设置脚本入口点。
以 pyproject.toml 为例:
[project]
name = "my_package"
version = "0.1.0"
...
[project.scripts]
mycmd = "my_package.module_a:main"
安装后(pip install .),可以直接在命令行运行:
mycmd
这会调用 my_package/module_a.py 中的 main() 函数。
基本上就这些。根据你的需求选择:
- 想让目录变成包 → 用 __init__.py
- 想支持
python -m package→ 用 __main__.py - 想安装后有命令行命令 → 用 pyproject.toml 配置 scripts








