python中main.py 和 __init__.py用法区别

 更新时间:2026年09月30日 09:45:32   作者:程序员食堂  
本文主要介绍了python中main.py 和 __init__.py用法区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

这两个文件在 Python 项目中扮演完全不同的角色,但经常让初学者困惑。

一、​​__init__.py​​

作用:把目录变成"包"

mypackage/
├── __init__.py      # 这个文件的存在,让 mypackage 成为一个"包"
├── module_a.py
└── module_b.py

核心功能:

  1. 标识包:告诉 Python 这个目录应该被当作一个包(package)来处理
  2. 初始化代码:包被导入时自动执行
  3. 控制导入:定义 __all__,简化导入路径

示例

# mypackage/__init__.py
print("mypackage 被导入了")

from .module_a import func_a      # 让用户可以直接 mypackage.func_a()
from .module_b import func_b

__all__ = ['func_a', 'func_b']    # from mypackage import * 时导出什么

使用:

import mypackage
mypackage.func_a()   # 不用写 mypackage.module_a.func_a()

Python 3.3+ 的命名空间包

从 Python 3.3 起,​​__init__.py​​ 不是必需的(隐式命名空间包),但推荐保留,因为它能:

  • 明确标识包边界
  • 兼容旧版本
  • 放置初始化逻辑

二、​​main.py​​

作用:程序的入口文件

project/
├── main.py          # 程序从这里开始运行
├── utils.py
└── mypackage/
    └── __init__.py

特点:

  1. 通常是顶层脚本,直接 python main.py 运行
  2. 一般不放在包里,或者放在包里作为命令行入口
  3. 负责组织程序流程:解析参数、调用各模块、启动服务等

示例

# main.py
from mypackage import func_a, func_b
import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--name", default="world")
    args = parser.parse_args()
    
    func_a()
    func_b()
    print(f"Hello, {args.name}")

if __name__ == "__main__":   # 关键:只在直接运行时执行
    main()

三、对比总结

特性

​​__init__.py​​

​​main.py​​

位置

包目录内部

项目根目录(或包内作为入口)

是否必需

Python 3.3+ 可选,但推荐

否(只是约定俗成)

执行时机

包被导入时

手动运行 / 命令行调用

主要用途

标识包、初始化、控制导入

程序入口、组织流程

典型内容

​​from .x import y​​​, ​​__all__​​

​​if __name__ == "__main__":​​

能否多个

每个包一个

可以有多个入口脚本

四、​​__name__ == "__main__"​​ 的关系

这是连接两者的关键概念:

# mypackage/__init__.py 里也可以写:
if __name__ == "__main__":
    print("直接运行 __init__.py")
  • 当文件被导入时,__name__ 是模块名(如 mypackage)
  • 当文件被直接运行时,__name__ 是 "__main__"

所以 ​​main.py​​ 里常写 ​​if __name__ == "__main__":​​,保证它被导入时不误执行。

五、常见项目结构

简单脚本

project/
├── main.py
├── utils.py
└── config.py

正规包结构

project/
├── main.py              # 入口
├── requirements.txt
└── mypackage/
    ├── __init__.py
    ├── core.py
    ├── utils.py
    └── cli.py

可安装的包(带命令行入口)

# pyproject.toml
[project.scripts]
myapp = "mypackage.main:main"

此时 ​​mypackage/main.py​​ 就是包内的入口模块。

一句话总结

​​__init__.py​​​ 让目录成为"包",控制导入行为;​​​main.py​​​ 是程序入口,负责启动和调度。

两者配合:​​main.py​​ 导入包 → 触发 ​​__init__.py​​ → 包内模块准备就绪 → ​​main.py​​ 调用它们运行程序。

到此这篇关于python中main.py 和 __init__.py用法区别的文章就介绍到这了,更多相关python main.py 和 __init__.py 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决TensorFlow训练内存不断增长,进程被杀死问题

    解决TensorFlow训练内存不断增长,进程被杀死问题

    今天小编就为大家分享一篇解决TensorFlow训练内存不断增长,进程被杀死问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python可视化text()函数使用详解

    python可视化text()函数使用详解

    这篇文章主要介绍了python可视化text()函数使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Django分页查询并返回jsons数据(中文乱码解决方法)

    Django分页查询并返回jsons数据(中文乱码解决方法)

    这篇文章主要介绍了Django分页查询并返回jsons数据(中文乱码解决方法),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • 一文详解Python中的转义字符使用技巧

    一文详解Python中的转义字符使用技巧

    在学习 Python 编程的过程中,处理文本(字符串)是最基础也是最频繁的操作之一,这时候,转义字符(Escape Characters) 就派上用场了,本文将带你系统地了解 Python 中的转义字符,从基础概念到实战技巧,需要的朋友可以参考下
    2026-08-08
  • Python中的复制、浅拷贝与深拷贝解读

    Python中的复制、浅拷贝与深拷贝解读

    这篇文章主要介绍了Python中的复制、浅拷贝与深拷贝解读,对于可变对象,赋值是最简单省事的,如b=a,意思是直接使得a指向b代表的对象,两者id一样,指向同一个对象,一个修改,另一个也随之变化,需要的朋友可以参考下
    2023-11-11
  • 排查 “Python 版本与 NumPy 不匹配”适配版本对照表与安装方法详解

    排查 “Python 版本与 NumPy 不匹配”适配版本对照表与安装方法详解

    NumPy库有许多版本,每个版本都有不同的功能和改进,这篇文章主要介绍了排查 “Python 版本与 NumPy 不匹配”适配版本对照表与安装方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-12-12
  • python机器学习之线性回归详解

    python机器学习之线性回归详解

    这篇文章主要介绍了python机器学习之线性回归详解,文中有非常详细的代码示例,对正在学习python的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-04-04
  • python简单验证码识别的实现方法

    python简单验证码识别的实现方法

    这篇文章主要给大家介绍了关于python简单验证码识别的实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Python字符串格式化str.format()方法的实现

    Python字符串格式化str.format()方法的实现

    字符串的格式化是一个非常重要的功能,用于创建包含变量值的字符串,本来就来介绍一下Python字符串格式化str.format()方法的实现,感兴趣的可以了解一下
    2023-11-11
  • Python Diagrams库以代码形式生成云系统架构图实例详解

    Python Diagrams库以代码形式生成云系统架构图实例详解

    这篇文章主要介绍了Python Diagrams库以代码形式生成云系统架构图实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01

最新评论