欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 【Python】__main__.py、__init__.py

【Python】__main__.py、__init__.py

2025/2/4 1:09:31 来源:https://blog.csdn.net/qq_45742250/article/details/145042917  浏览:    关键词:【Python】__main__.py、__init__.py

文章目录

    • 1. __init__.py
      • 作用:
      • 用法:
      • 示例:
      • 特点
    • 2. __main__.py
      • 作用:
      • 用法:
      • 示例:
      • 特点:
    • 3. 综合示例
      • 总结:

1. init.py

作用:

  • __init__.py 文件的主要作用是标识一个目录是一个 Python 包,并且可以在包初始化时执行一些代码。它使得该目录下的模块可以被导入到其他模块中。

  • 如果一个目录包含 __init__.py 文件,则该目录被视为一个 Python 包。没有 __init__.py 文件的目录会被视为普通文件夹,无法作为包被导入。

  • __init__.py 文件通常用于包的初始化,可以包含导入语句、初始化设置、配置项、或者定义一些包级别的常量

用法:

  • 在包目录下创建一个 __init__.py 文件,文件可以是空的,也可以包含一些初始化代码。
    -__init__.py文件可以包含一些初始化操作,例如导入子模块、函数、类等。

示例:

假设有以下项目结构:

my_project/├── my_package/│   ├── __init__.py│   ├── module1.py│   └── module2.py└── main.py

__init__.py 可以是空的,也可以包含一些初始化代码。例如:

# my_package/__init__.py
print("Initializing my_package...")from .module1 import function1
from .module2 import function2

main.py 中,我们可以导入 my_package 中的函数:

# main.py
import my_packagemy_package.function1()
my_package.function2()

在这种情况下,my_package/__init__.py 会在导入时执行,打印 “Initializing my_package...”。

特点

可以包含包的初始化逻辑。
导入包时,__init__.py 会自动执行。
如果 __init__.py 文件是空的,目录依然会被识别为包,但不会执行任何代码。

2. main.py

作用:

  • __main__.py 文件在包作为脚本运行时起作用。它定义了包的“入口点”,使得我们能够直接运行一个包目录,而不是单独运行包中的某个模块。

  • 当你在命令行中执行 python -m package_name 时,Python 会尝试运行该包中的 __main__.py 文件。

  • __main__.py 文件通常用于包的主要功能或者入口点,类似于一个包的 “main” 函数。

用法:

  • __main__.py 仅在包作为主程序运行时起作用。它通常是一个包含主要程序逻辑的文件。
  • 当使用 python -m package_name 命令执行包时,__main__.py 会被执行。

示例:

假设我们有如下项目结构:

my_project/├── my_package/│   ├── __init__.py│   ├── __main__.py│   ├── module1.py│   └── module2.py└── main.py
__main__.py 中定义了包的入口逻辑:
# my_package/__main__.py
print("Welcome to my_package!")

然后,你可以在命令行中使用 -m 参数来运行包:

python -m my_package

当运行上面的命令时,Python 会查找 my_package 包中的__main__.py文件并执行它,输出:

Welcome to my_package!

特点:

用于定义包的“入口点”,使得包可以直接运行。
当包作为模块运行时,main.py 会被执行。
如果包目录没有 main.py 文件,那么运行 python -m package_name 会抛出 ModuleNotFoundError 错误。

3. 综合示例

以下是一个更复杂的示例,展示了 __init__.pymain.py 如何协作:

假设项目结构如下:

my_project/├── my_package/│   ├── __init__.py│   ├── __main__.py│   ├── module1.py│   └── module2.py└── main.py
  • module1.py:
# my_package/module1.py
def greet():print("Hello from module1!")
  • module2.py:
# my_package/module2.py
def goodbye():print("Goodbye from module2!")
  • __init__.py
# my_package/__init__.py
from .module1 import greet
from .module2 import goodbye
  • main.py:
# my_package/__main__.py
from . import greet, goodbyedef main():greet()goodbye()if __name__ == "__main__":main()
  • main.py:
# main.py
import my_package

运行效果:

  1. 直接运行包:如果在命令行中运行 python -m my_package,Python 会执行 my_package/__main__.py 文件中的 main() 函数,输出:
Hello from module1!
Goodbye from module2!
  1. 导入包:如果在 main.py 中执行 import my_package,则会触发 my_package/__init__.py 中的导入逻辑,但不会自动执行 __main__.py

总结:

__init__.py:用于标识目录为包,并进行包级别的初始化。可以包含初始化逻辑,导入子模块等。
__main__.py:用于定义包的入口点,使得包可以作为脚本运行(通过 python -m package_name 命令)。
这两者结合使用,可以使得 Python 项目在作为模块使用时更具灵活性,同时能够方便地作为独立的脚本运行。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com