DataLearner 标志DataLearnerAI
最新AI资讯
大模型排行榜
大模型评测基准
大模型列表
大模型对比
资源中心
工具
语言中文
DataLearner 标志DataLearner AI

专注大模型评测、数据资源与实践教学的知识平台,持续更新可落地的 AI 能力图谱。

产品

  • 评测榜单
  • 模型对比
  • 数据资源

资源

  • 部署教程
  • 原创内容
  • 工具导航

关于

  • 关于我们
  • 隐私政策
  • 数据收集方法
  • 联系我们

© 2026 DataLearner AI. DataLearner 持续整合行业数据与案例,为科研、企业与开发者提供可靠的大模型情报与实践指南。

隐私政策服务条款
  1. 首页/
  2. 博客列表/
  3. 博客详情

Python包中__init__.py文件的作用和用法

2021/10/16 21:42:55
2,173 阅读
python编程

在Python工程中,我们经常可以看到带有“__init__.py”文件的目录,在PyCharm中,带有这个文件的目录被认为是Python的包目录,与目录的图标有不一样的显示。如下图所示,dir_example是一个空白目录,图标是个文件夹图标,而init_example下有__init__.py文件,其图标是一个包。

那么这个文件的作用是什么,我们平时如何使用呢,这篇文章将解释这个问题。

  • 一、\_\_init\_\_.py文件简介
  • 二、\_\_init\_\_.py文件的使用案例
  • 2.1、没有\_\_init\_\_.py文件的目录,使用`import xx.xx`会报错吗?
  • 2.2、在\_\_init\_\_.py文件中定义变量或者逻辑将在导入时候被执行
  • 2.3、在\_\_init\_\_.py文件中定义变量或者方法,可以被直接导入使用
  • 2.4、在\_\_init\_\_.py文件中使用\_\_all\_\_方法

一、__init__.py文件简介

Python 定义了两种类型的包,常规包和命名空间包。常规包是传统的包,因为它们存在于 Python 3.2 和更早的版本中。一个常规包通常被实现为一个包含__init__.py 文件的目录。当一个常规包被导入时,这个__init__.py文件被隐式执行,它所定义的对象被绑定到包的名字空间中。

这是Python官方文档中对__init__.py文件的描述,其实它的意思很简单,就是说Python文件都是按照目录当作不同的模块来组织的,这个目录被认为是Python包目录,Python会通过搜索该目录下的文件来导入相关的模块。但是并不是所有的目录都会被搜索添加,只有当目录中包含__init__.py文件时,这个目录才会被Python当作是一个包目录,进而搜索添加里面的文件。这样做可以让编程者自己控制哪些目录可以被Python导入成包。

当某个目录中包含__init__.py文件时,Python在引入这个模块之前,会首先执行这个文件。因此,这个文件也可以被编程者用来控制定义包级别的变量。

综上所述,__init__.py文件最主要的作用是2个:

  1. 当目录下包含这个文件时,Python会将其当作成包目录,进而可以使用import xx.xx的方式导入目录下的文件或者模块。
  2. 使用__init__.py文件可以控制模块导入时的变量和内容,便于编程者的控制。

下面我们看几个例子即可。

二、__init__.py文件的使用案例

2.1、没有__init__.py文件的目录,使用import xx.xx会报错吗?

看版本,在较低的版本中(如3.2及以下),没有__init__.py文件的目录不能使用import xx.xx导入相关模块,但是后面的版本可以。

2.2、在__init__.py文件中定义变量或者逻辑将在导入时候被执行

例如,我们有如下的目录结构:

init_example/
  a_pkg/
    __init__.py
	a.py
  init_test.py

即init_example工程下有个init_test.py文件和a_pkg目录,a_pkg目录下有__init__.py文件和一个a.py文件。

我们在a_pkg目录下的__init__.py文件定义:

print("Hey, I am a __init__.py file")

那么,如果我们在init_test.py中内容如下:

from a_pkg import *

执行init_test.py我们可以得到如下结果:

Hey, I am a __init__.py file

因为在from a_pkg import *时候,会首先执行a_pkg目录下的__init__.py文件。

2.3、在__init__.py文件中定义变量或者方法,可以被直接导入使用

还是上面的目录,假如我们在a_pkg目录下的a.py定义如下内容:

def a_method():
    print("I am a_pkg!")

在a_pkg目录下的__init__.py文件定义:

from a_pkg.a import a_method

那么,我们在init_test.py中引入a_pkg可以直接引入a_method方法:

from init_example.a_pkg import a_method
a_method()

会打印如下内容:

I am a_pkg!
2.4、在__init__.py文件中使用__all__方法

__all__方法可以在__init__.py文件定义一些包或者变量,可以在使用from init_example.a_pkg import *时定义*表达的内容。

例如还是上面的内容,但是我们在a_pkg目录下的__init__.py文件定义:

__all__ = ["a"]

那么,我们在init_test.py中使用下面的语句可以引入a模块:

from a_pkg import *
a.a_method()

这时候依然会打印如下内容:

I am a_pkg!

DataLearner 官方微信

欢迎关注 DataLearner 官方微信,获得最新 AI 技术推送

DataLearner 官方微信二维码
返回博客列表

相关博客

  • PyTorch 2.0发布——一个更快、更加Pythonic和灵活的PyTorch版本,让Tranformer运行更快!
  • 0基础安装搭建Visual Studio Code开发环境——Python开发环境
  • KerasCV——一个新的简单易用的计算机视觉(CV)算法库
  • Python for Data Analysis第三版免费在线学习网站来临!
  • Python3.11最新特性来了,多个好特性提升!
  • 为什么Python可以处理任意长度的整数运算——Python原理详解
  • Python编程环境搭建——小白起步教程!
  • Bloomberg发布的最新的memray——Python内存分析器是什么?

热门博客

  • 1Dirichlet Distribution(狄利克雷分布)与Dirichlet Process(狄利克雷过程)
  • 2回归模型中的交互项简介(Interactions in Regression)
  • 3贝塔分布(Beta Distribution)简介及其应用
  • 4矩母函数简介(Moment-generating function)
  • 5普通最小二乘法(Ordinary Least Squares,OLS)的详细推导过程
  • 6使用R语言进行K-means聚类并分析结果
  • 7深度学习技巧之Early Stopping(早停法)
  • 8手把手教你本地部署清华大学的ChatGLM-6B模型——Windows+6GB显卡本地部署