【Python】__main__.py、__init__.py

news2025/1/11 6:12:58

文章目录

    • 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_package

my_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, goodbye

def 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 项目在作为模块使用时更具灵活性,同时能够方便地作为独立的脚本运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2274744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TypeScript Jest 单元测试 搭建

NPM TypeScript 项目搭建 创建目录 mkdir mockprojectcd mockproject初始化NPM项目 npm init -y安装TypeScript npm i -D typescript使用VSCode 打开项目 创建TS配置文件tsconfig.json {"compilerOptions": {"target": "es5","module&…

FPGA技术的深度理解

目录 引言 FPGA的基本原理 结构组成 工作原理 FPGA的设计流程 设计阶段 编程阶段 实现阶段 FPGA的应用领域 FPGA编程技巧和示例代码 编程技巧 示例代码 结论 引言 FPGA(现场可编程门阵列)是一种可编程的集成电路,它允许用户根据…

Mysql进阶篇

一:存储引擎 二:索引 2.1 索引概述 索引(index)帮助mysql高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用&…

《Spring Framework实战》15:4.1.4.6.方法注入

欢迎观看《Spring Framework实战》视频教程 方法注入 在大多数应用场景中,容器中的大多数bean都是单例(singletons)的。当单例bean需要与另一个单例bean协作或非单例bean需与另一非单例bean协作时,通常通过将一个bean定义为另一个…

Flutter:使用FVM安装多个Flutter SDK 版本和使用教程

一、FVM简介 FVM全称:Flutter Version Management FVM通过引用每个项目使用的Flutter SDK版本来帮助实现一致的应用程序构建。它还允许您安装多个Flutter版本,以快速验证和测试您的应用程序即将发布的Flutter版本,而无需每次等待Flutter安装。…

目标客户营销(ABM)结合开源AI智能名片2+1链动模式S2B2C商城小程序的策略与实践

摘要:在数字化营销日益盛行的今天,目标客户营销(Account Based Marketing, ABM)作为一种高度定制化的营销策略,正逐步成为企业获取高质量客户、提升市场竞争力的重要手段。与此同时,开源AI智能名片21链动模…

docker(目录挂载、卷映射)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、目录挂载1.命令2.案例3.补充 二、卷映射1.命令2.案例 总结 前言 在使用docker部署时,我们如果要改变一些配置项目,不可能每次都进入…

opencv warpAffine仿射变换C++源码分析

基于opencv 3.1.0源代码 sources\modules\imgproc\src\imgwarp.cpp void cv::warpAffine( InputArray _src, OutputArray _dst,InputArray _M0, Size dsize,int flags, int borderType, const Scalar& borderValue ) {...if( !(flags & WARP_INVERSE_MAP) ){//变换矩阵…

使用 IntelliJ IDEA 创建简单的 Java Web 项目

以下是使用 IntelliJ IDEA 创建几个简单的 Java Web 项目的步骤,每个项目实现基本的登录、注册和查看列表功能,依赖 Servlet/JSP 和基本的 Java Web 开发。 前置准备 确保安装了 IntelliJ IDEA Ultimate(社区版不支持 Web 应用)。…

R语言在森林生态研究中的魔法:结构、功能与稳定性分析——发现数据背后的生态故事!

森林生态系统结构、功能与稳定性分析与可视化研究具有多方面的重要意义,具体如下: 一、理论意义 ●深化生态学理论 通过研究森林生态系统的结构、功能与稳定性,可以深化对生态系统基本理论的理解。例如,生物多样性与生态系统稳定性…

QML states和transitions的使用

一、介绍 1、states Qml states是指在Qml中定义的一组状态(States),用于管理UI元素的状态转换和属性变化。每个状态都包含一组属性值的集合,并且可以在不同的状态间进行切换。 通过定义不同的状态,可以在不同的应用场…

Git:Cherry-Pick 的使用场景及使用流程

前面我们说了 Git合并、解决冲突、强行回退等解决方案 >> 点击查看 这里再说一下 Cherry-Pick功能,Cherry-Pick不是merge,只是把部分功能代码Cherry-Pick到远程的目标分支 git cherry-pick功能简介: git cherry-pick 是用来从一个分…

【SpringAOP】Spring AOP 底层逻辑:切点表达式与原理简明阐述

前言 🌟🌟本期讲解关于spring aop的切面表达式和自身实现原理介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 &am…

python基础和redis

1. Map函数 2. filter函数 numbers generate_numbers() filtered_numbers filter(lambda x: x % 2 0, numbers) for _ in range(5):print(next(filtered_numbers)) # 输出: 0 2 4 6 83. filter map 和 reduce 4. picking and unpicking 5. python 没有函数的重载&#xff0…

python-42-使用selenium-wire爬取微信公众号下的所有文章列表

文章目录 1 seleniumwire1.1 selenium-wire简介1.2 获取请求和响应信息2 操作2.1 自动获取token和cookie和agent2.3 获取所有清单3 异常解决3.1 请求url失败的问题3.2 访问链接不安全的问题4 参考附录1 seleniumwire Selenium WebDriver本身并不直接提供获取HTTP请求头(header…

Windows安装ES单机版设置密码

下载ES ES下载链接 我用的是7.17.26 启动前配置 解压之后打开D:\software\elasticsearch-7.17.26\bin\elasticsearch-env.bat 在elasticsearch-env.bat文件中修改jdk的路径 修改前 修改内容 if defined ES_JAVA_HOME (set JAVA"D:\software\elasticsearch-7.17.26\…

Java并发编程面试题:内存模型(6题)

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

标准应用 | 2025年网络安全服务成本度量实施参考

01 网络安全服务成本度量依据相关新变化 为了解决我国网络安全服务产业发展中面临的服务供需两方对于服务成本组成认知偏差较大、网络安全服务成本度量缺乏依据的问题,中国网络安全产业联盟(CCIA)组织北京赛西科技发展有限责任公司、北京安…

太速科技-FMC141-四路 250Msps 16bits AD FMC子卡

FMC141-四路 250Msps 16bits AD FMC子卡 一、产品概述: 本板卡基于 FMC 标准板卡,实现 4 路 16-bit/250Msps ADC 功能。遵循 VITA 57 标准,板卡可以直接与xilinx公司或者本公司 FPGA 载板连接使用。板卡 ADC 器件采用 ADI 公司 AD9467 芯…

通义灵码在跨领域应用拓展之物联网篇

目录 一.引言 二.通义灵码简介 三.通义灵码在物联网领域的设备端应用 1.传感器数据采集 (1).不同类型传感器的数据读取 (2).数据转换与预处理 2.设备控制指令接收和执行 (1).指令解析与处理 (2).设备动作执行 四.通义灵码在物联网领域的云端平台应用 1.数据存储和管…