`
qinshanwu
  • 浏览: 73470 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Python模块包中__init__.py文件的作用

阅读更多
    用django做开发已经一年多的时间,但基本没注意python模块中__init__.py文件存在的意义,偶然看到对它的介绍吓一大跳,这个文件太重要了

模块包:

包通常总是一个目录,目录下为首的一个文件便是 __init__.py。然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。差不多就像这样吧:

Package1/ __init__.py    Module1.py    Module2.py    Package2/ __init__.py       Module1.py       Module2.py
我们可以就这样导入一个包:

import Package1
或者调入一个子模块和子包:

from Package1 import Module1from Package1 import Package2import Packag1.Module1import Packag1.Package2
可以深入好几层包结构:

from Package1.Package2 import Module1import Package1.Package2.Module1
大致就这样吧,我觉得,包的精髓应该是在 __init__.py 这个文件之中的。








__init__.py 文件:

__init__.py 控制着包的导入行为。假如 __init__.py 为空,那么仅仅导入包是什么都做不了的。

>>> import Package1>>> Package1.Module1Traceback (most recent call last): File "<pyshell#1>", line 1, in ?  Package1.Module1AttributeError: 'module' object has no attribute 'Module1'
我们需要在 __init__.py 里把 Module1 预先导入:

#文件 __init__.pyimport Module1
测试:

>>> import Package1>>> Package1.Module1<module 'Package1.Module1' from 'Module.pyc'>
__init__.py 中还有一个重要的变量,叫做 __all__。我们有时会使出一招“全部导入”,也就是这样:

from PackageName import *
这时 import 就会把注册在包 __init__.py 文件中 __all__ 列表中的子模块和子包导入到当前作用域中来。比如:

#文件 __init__.py__all__ = ['Module1', 'Module2', 'Package2']
测试:

>>> from Package1 import *>>> Module2<module 'Package1.Module2' from 'Module.pyc'>
__init__.py 文件会在导入时被执行。

分享到:
评论
3 楼 hbszyandong 2009-10-16  
惭愧了,我搞了2年也不知道,学习了。
2 楼 incredible 2009-08-11  
你们这些人都不看书的么
1 楼 phyeas 2009-07-22  
....据说一个module也有__all__。所以在python中package和module好像区别不大,而__init__.py似乎是想让package和module看起来差不多而已。

相关推荐

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

    本文实例讲述了Python模块包中__init__.py文件功能。分享给大家供大家参考,具体如下: 用django做开发已经一年多的时间,但基本没注意python模块中__init__.py文件存在的意义,偶然看到对它的介绍吓一大跳,这个...

    discussion.zip Python关于import的实验(10) 利用__init__.py文件将变量和包下的模块作为包的属性

    总结来说,本实验的重点在于理解`__init__.py`文件在创建Python包中的作用,以及如何通过它来定义和组织包的公共属性和接口。通过这样的实践,开发者能够更好地管理和组织大型项目,提高代码的可读性和可维护性。在...

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

    __init__.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件。 通常__init__.py 文件为空,但是我们还可以为它增加其他的功能。我们在导入一个包时,实际上是导入了它的...

    Python包,__init__.py功能与用法分析

    本文将深入探讨Python包的概念、功能,以及`__init__.py`文件的作用和用法。 ### 包的概念与作用 包是Python中的一个重要的组织模块的方式,它本质上是一个包含`__init__.py`文件的文件夹。通过创建包,我们可以将...

    python基础之包的导入和__init__.py的介绍

    假设想要在 `lib` 包中使用 `from lib import *` 的方式导入所有子模块,则可以在 `lib/__init__.py` 中定义如下内容: ```python __all__ = ["mod2", "mod3", "sub"] ``` 这表示当使用 `from lib import *` 时,...

    #深入理解# PyQt5库下的 __init__.py 文件

    `__init__.py` 文件在Python包中起着标识作用,表明其所在的文件夹是一个Python包,这样Python解释器在导入时就能识别并处理这个包。在PyQt5库中,`__init__.py` 可能包含了对其他模块的导入、设置、注册等操作,以...

    python学习记录(包)

    3. **添加模块:** 在包目录中添加你需要的Python模块文件。 #### 四、如何使用包 1. **导入整个包:** 你可以通过`import my_package`来导入整个包。此时,你可以通过`my_package.module1`来访问包内的模块。 2. ...

    python基础3day03.txt

    .pyc 是 .py的编译文件 模块的内建属性 __doc__ __name__ # 主要用来判断当前模块是否是主模块 __file__ 模块的文档字符串 模块的 __all__列表 from xxx import * 模块的隐藏属性 以 _ 开头的属性为隐藏...

    第十天 06包的使用【千锋Python人工智能学院】1

    `__init__.py`文件在包中的作用至关重要: - **标识包**:当一个文件夹包含`__init__.py`(可以是空文件)时,Python识别其为一个包,允许导入其中的模块。 - **初始化**:`__init__.py`可以包含任何Python代码,当...

    第10章 模块.pptx

    - **跨包引用**:如果需要从一个包中的模块引用另一个包中的模块,可以在包的`__init__.py`文件中通过修改`sys.path`来解决: ```python import sys sys.path.append('..') ``` #### 五、模块的发布 模块发布...

    python 包引用的问题

    这个特殊的`__init__.py`文件告诉Python,这个文件夹应该被视为一个包。`__init__.py`可以是空文件,也可以包含初始化代码。例如,我们创建一个名为`mypackage`的包,其结构可能是这样的: ``` mypackage/ __init...

    python模块添加

    ### Python模块添加详解 在Python编程中,模块的管理和导入是一项基本且重要的技能。通过合理的模块组织和导入,可以提高代码的可读性、可维护性和重用性。本文将根据给定的文件内容,深入解析如何在Python中添加和...

    浅谈Python中文件夹和python package包的区别

    1.原来在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中也有__init__.py那么它就是这个包的子包了。 当你将一个包作为模块导入(比如从...

    Python中_name==_main的解释

    例如,在一个名为`a`的包中,有子包`b`,其中包含`c.py`和`__init__.py`文件。若在这些文件中都打印出`__name__`的值,可以清晰地展示出它们之间的层次关系。 - 当我们通过命令行执行`python -c "import a.b.c"`时...

    MySQLdb,python

    在MySQLdb这个包中,`__init__.py`通常包含了导入和初始化其他模块的代码,使用户可以通过`import MySQLdb`的方式来使用整个库。这个文件可能定义了一些基本的配置,以及对其他子模块的导出,比如连接对象、游标对象...

    python import

    `__init__.py`文件的存在标识了`my_project`、`folder1`和`folder2`是Python包,使得它们的成员可以被导入。 4. **添加路径到sys.path**: 如果你需要导入的模块位于`sys.path`之外,可以通过在程序开始时动态...

    第10.6节 Python包的概念.rar

    - 创建一个新目录,并在其中创建一个名为`__init__.py`的文件,这个目录就变成了一个Python包。 - 如果需要在包内创建子包,只需在子目录中也放置一个`__init__.py`文件。 3. **导入包**: - 使用`.`操作符来...

    对Python模块导入时全局变量__all__的作用详解

    假设有一个名为 `sound` 的包,其中包含子包 `effects`,子包 `effects` 下有 `__init__.py` 文件以及 `echo.py`, `surround.py`, `reverse.py` 等模块。 `sound/effects/__init__.py` 文件内容如下: ```python _...

Global site tag (gtag.js) - Google Analytics