Python中__init__.py文件的作用

目录
  • 1 init文件夹图标
  • 2 init.py导入包方式
    • 2.1 单个导入
    • 2.2 批量引入(定义__all__用来模糊导入)
  • 3 实例
  • 4 其他常见问题
    • 4.1 使用__init__.py文件的优点
    • 4.2 没有__init__.py文件的目录,使用import xx.xx会报错吗?
    • 4.3 根据导入模块和主程序不同import方式

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文件 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python模块包中__init__.py文件功能分析

    本文实例讲述了Python模块包中__init__.py文件功能.分享给大家供大家参考,具体如下: 用django做开发已经一年多的时间,但基本没注意python模块中__init__.py文件存在的意义,偶然看到对它的介绍吓一大跳,这个文件太重要了 模块包: 包通常总是一个目录,目录下为首的一个文件便是 __init__.py.然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了. 差不多就像这样吧: Package1/ __init__.py   

  • Python包中__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__方法 总结 前言 在Python工程中,我们经常可以看到带有“__init__.py”文件的目录,在PyCharm中,

  • Python中__init__.py文件的作用详解

    __init__.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件. 通常__init__.py 文件为空,但是我们还可以为它增加其他的功能.我们在导入一个包时,实际上是导入了它的__init__.py文件.这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入. # package # __init__.py import re import urllib import sys impo

  • Python中__init__.py文件的作用

    目录 1 init文件夹图标 2 init.py导入包方式 2.1 单个导入 2.2 批量引入(定义__all__用来模糊导入) 3 实例 4 其他常见问题 4.1 使用__init__.py文件的优点 4.2 没有__init__.py文件的目录,使用import xx.xx会报错吗? 4.3 根据导入模块和主程序不同import方式 1 init文件夹图标 在PyCharm中,带有__init__.py这个文件的目录被认为是Python的包目录,与普通目录的图标有不一样的显示.如下图所示,d

  • 深入理解Python中__init__.py文件

    目录 1. 简介 1.1 模块(Module)和包(Package)的概念 1.2 __init__.py文件简介 2. __init__.py内容写法 2.1 __init__.py文件内容 2.2 __init__.py内容解释 1. 简介 1.1 模块(Module)和包(Package)的概念 模块是程序,任何Python程序都可以作为模块导入.写在脚本.py文件中的函数,比如xx.py,可以在另一个模块或者脚本中通过import xx进行导入.如果要导入xx.py中的函数yy,就写成f

  • python中关于py文件之间相互import的问题及解决方法

    目录 问题背景 实例演示 问题背景 调试脚本时,遇到一个问题:ImportError: cannot import name 'A' from 'study_case.a' (/Users/rchera/PycharmProjects/test/study_case/a.py) 具体情况是这样婶儿的: 前些日子写了一个py文件,它的功能主要是创建数据(暂且称为create_data.py,每条数据会生成一个唯一的id): 同时写了另一个py文件,它的功能主要是操作数据,例如对数据进行编辑.删除等

  • python 中 __init__的意义以及作用

    目录 python 中 __init__的用法和含义 补充:Python类中__init__()的作用 python 中 __init__的用法和含义 python 中 __init__  与PHP中的构造函数相似__construct() 都具有初始化的作用. 1.python中的__init__是一个私有函数(方法),访问私有函数中的变量在python中用self,在PHP中用$this 2.在python类的定义中,一个函数(php叫方法)的参数中必须带有self参数,且self放在第一位

  • 在cmd中运行.py文件: python的操作步骤

    1 打开cmd, 不改变运行的目录: 输入python 空格  调试好的python文件路径 或者python 空格  将python文件拖入cmd中 2 打开cmd 输入要改变的路径盘 比如:E: (回车键) 输入路径languang\sublime\pythonTest.py 回车运行 以上这篇在cmd中运行.py文件: python的操作步骤就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们. 您可能感兴趣的文章: 在CMD命令行中运行python脚本的方法

  • python 在某.py文件中调用其他.py内的函数的方法

    假设名为A.py的文件需要调用B.py文件内的C(x,y)函数 假如在同一目录下,则只需 import B if __name__ == "__main__": B.C(x,y) 若只需调用单个函数,也可以 from B import C if __name__ == "__main__": C(x,y) 若A.py和B.py位于不同的目录下,可以用以下方法 (假设B.py位于D盘的根目录下) 1.引用所在路径 import sys sys.path.append(

  • python非单一.py文件用Pyinstaller打包发布成exe

    目录 一:背景以及项目结构介绍 二:实施步骤 1:总体思路 2:安装pyinstaller 3:具体步骤(以我项目为例子) 三:疑难杂症和需要注意的坑 1:打包找不到模块问题 2:打包后,一直提示Failed to execute scrpt xxx问题 3:cmd下运行打包好的exe,运行一段时间卡主不动,按一下回车才继续 4:其他注意事项 一:背景以及项目结构介绍 第一次将自己做的python爬虫项目打包成exe,搜了很多网上教程,大部分都是打包一个py文件的小demo,这里先给个笑脸吧,除

随机推荐