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实现Mysql数据统计及numpy统计函数

    Python实现Mysql数据统计及numpy统计函数

    这篇文章主要介绍了Python实现Mysql数据统计的实例代码,给大家介绍了Python数据分析numpy统计函数的相关知识,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • 如何基于Python + requests实现发送HTTP请求

    如何基于Python + requests实现发送HTTP请求

    这篇文章主要介绍了如何基于Python + requests实现发送HTTP请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • python套接字流重定向实例汇总

    python套接字流重定向实例汇总

    套接字是一种具有之前所说的“通信端点”概念的计算网络数据结构。相当于电话插口,没它无法通信,这个比喻非常形象。今天我们就来汇总一下套接字流重定向的实例
    2016-03-03
  • python登录豆瓣并发帖的方法

    python登录豆瓣并发帖的方法

    这篇文章主要介绍了python登录豆瓣并发帖的方法,涉及URL模拟登陆及cookie的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • wxPython实现绘图小例子

    wxPython实现绘图小例子

    这篇文章主要为大家详细介绍了wxPython实现绘图小例子,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • 使用python turtle画高达

    使用python turtle画高达

    今天小编就为大家分享一篇使用python turtle画高达,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python3 利用requests 库进行post携带账号密码请求数据的方法

    Python3 利用requests 库进行post携带账号密码请求数据的方法

    今天小编就为大家分享一篇Python3 利用requests 库进行post携带账号密码请求数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python subprocess库的使用详解

    Python subprocess库的使用详解

    这篇文章主要介绍了Python subprocess库的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • python基础之定义类和对象详解

    python基础之定义类和对象详解

    这篇文章主要为大家详细介绍了python的定义类和对象,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 如何基于Python代码实现高精度免费OCR工具

    如何基于Python代码实现高精度免费OCR工具

    这篇文章主要介绍了如何基于Python代码实现高精度免费OCR工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论