Python中__init__.py文件的作用

 更新时间:2022年09月23日 15:00:03   作者:偶尔躺平的咸鱼  
这篇文章主要介绍了Python中__init__.py文件的作用,在PyCharm中,带有__init__.py这个文件的目录被认为是Python的包目录,与普通目录的图标有不一样的显示

1 init文件夹图标

在PyCharm中,带有__init__.py这个文件的目录被认为是Python的包目录,与普通目录的图标有不一样的显示。
如下图所示,data目录没有__init__.py,其图标是个文件夹图标;而model下有_init__.py文件,其图标是一个包。所以__init__.py是Python中package的标识

2 init.py导入包方式

__init__.py文件的一个主要作用是将文件夹变为一个Python模块,Python中的每个模块的包中,都有__init__.py 文件。

python在解释包的时候会给本模块下的所有文件建立一个索引放在当前路径下的__init__.py文件中,如果没有文件索引,即使import了指定的包,解释器还是找不到这个模块下的文件。如果一个文件夹下没有__init__.py文件,不会被当做一个模块。

2.1 单个导入

# package
# __init__.py
import re
import urllib
import sys
import os
# a.py
import package 
print(package.re, package.urllib, package.sys, package.os)

注意这里访问__init__.py文件中的引用文件,需要加上包名。

2.2 批量引入(定义__all__用来模糊导入)

我们在python中导入一个包时,实际上是导入了它的__init__.py文件,这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。

使用__init__.py中的重要变量__all__, 将模块全部导入。

# __init__.py
__all__ = ['os', 'sys', 're', 'urllib']
# a.py
from package import *

这就会将注册在__init__.py文件中__all__列表中的模块和包导入到当前文件中来。

3 实例

假设我们的模块包的目录结构如下:

- mypackage
- - subpackage_1
- - - test11.py
- - - test12.py
- - subpackage_2
- - - test21.py
- - - test22.py
- - subpackage_3
- - - test31.py
- - - test32.py

直接导入:

如果我们使用最直接的导入方式,将整个文件拷贝到工程目录下,然后直接导入:

from mypackage.subpackage_1 import test11
from mypackage.subpackage_1 import test12
from mypackage.subpackage_2 import test21
from mypackage.subpackage_2 import test22
from mypackage.subpackage_3 import test31
from mypackage.subpackage_3 import test32

这样的话,查找的时候也会麻烦,此时__init__.py就起到了简化的作用。

init.py导入:

在mypackage/添加__init__.py程序,有三种写入方式。

from mypackage.subpackage_1 import test11
from mypackage import *
from mypackage.subpackage_1 import *

4 其他常见问题

4.1 使用__init__.py文件的优点

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

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

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

4.3 根据导入模块和主程序不同import方式

(1)如果导入的模块和主程序在同个目录下,直接import就行了

(2)如果导入的模块是在主程序所在目录的子目录下,可以在子目录中增加一个空白的__init__.py文件,该文件使得python解释器将子目录整个也当成一个模块,然后直接通过“import 子目录.模块”导入即可。

(3)如果导入的模块是在主程序所在目录的父目录下,则要通过修改path来解决,有两种方法:
①通过sys.path.append

import sys
sys.path.append('父目录的路径')  # '需要引用模块的地址'

来改变。python解释器就是通过sys.path去的寻找模块的。sys.path是一个列表 list ,它里面包含了已经添加到系统的环境变量路径。

【注意】:这种方法是运行时修改,脚本运行后就会失效。

②直接修改环境变量:在windows中是 “ set 变量=‘路径’ ” 例如:set PYTHONPATH=‘C:\test…’ 查看是否设置成功用echo %PYTHONPATH%,而且进到python解释器中查看sys.path,会发现已经有了新增加的路径了。这 种方式是永久的,一次设置以后一直都有效。在linux中是 “export 变量=‘路径’ “,查看是” echo $变量 "

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

相关文章

  • 对Python 两大环境管理神器 pyenv 和 virtualenv详解

    对Python 两大环境管理神器 pyenv 和 virtualenv详解

    今天小编就为大家分享一篇对Python 两大环境管理神器 pyenv 和 virtualenv详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python实现在Linux系统下更改当前进程运行用户

    Python实现在Linux系统下更改当前进程运行用户

    这篇文章主要介绍了Python实现在Linux系统下更改当前进程运行用户,本文直接给出实现代码,需要的朋友可以参考下
    2015-02-02
  • python爬取2021猫眼票房字体加密实例

    python爬取2021猫眼票房字体加密实例

    在本篇文章里小编给大家整理的是一篇关于python爬取2021猫眼票房字体加密实例内容,有兴趣的朋友们可以学习下。
    2021-02-02
  • Python 读取千万级数据自动写入 MySQL 数据库

    Python 读取千万级数据自动写入 MySQL 数据库

    这篇文章主要介绍了Python 读取千万级数据自动写入 MySQL 数据库,本篇文章会给大家系统的分享千万级数据如何写入到 mysql,分为两个场景,两种方式
    2022-06-06
  • python版本的仿windows计划任务工具

    python版本的仿windows计划任务工具

    这篇文章主要介绍了python版本的仿windows计划任务工具,计划任务工具根据自己设定的具体时间,频率,命令等属性来规定所要执行的计划,当然功能不是很全大家可以补充
    2018-04-04
  • Pytorch数据读取之Dataset和DataLoader知识总结

    Pytorch数据读取之Dataset和DataLoader知识总结

    Dataset和DataLoader都是Pytorch里面读取数据的工具.现在对这两种工具做一个概括和总结,对正在学习Pytorch的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • Python JSON格式数据的提取和保存的实现

    Python JSON格式数据的提取和保存的实现

    这篇文章主要介绍了Python JSON格式数据的提取和保存的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 3个Python SQLAlchemy数据库操作功能详解

    3个Python SQLAlchemy数据库操作功能详解

    Python SQLAlchemy 是一个强大且多功能的 Python SQL 工具包和对象关系映射 (ORM) 系统,提供了一整套众所周知的企业级持久性模式,本文为大家整理了它必须了解的3个数据库操作功能,希望对大家有所帮助
    2023-09-09
  • Python将脚本程序转变为可执行程序的实现

    Python将脚本程序转变为可执行程序的实现

    本文主要介绍了Python将脚本程序转变为可执行程序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 使用pandas生成/读取csv文件的方法实例

    使用pandas生成/读取csv文件的方法实例

    在使用Pandas处理数据时,常见的读取数据的方式时从Excel或CSV文件中获取,这篇文章主要给大家介绍了关于如何使用pandas生成、读取csv文件的相关资料,需要的朋友可以参考下
    2021-07-07

最新评论