如何制作一个自己的
首先,需要创建一个文件夹,将其作为顶层包,在此文件夹内我们可以定义各个不同的子文
件夹与 .py 文件作为各个子包与模块
注意:在每个包文件夹下都需要有一个 __init__.py 文件,此文件可以为空
例如:我们创建一个文件夹Test作为顶层包文件夹,在Test内添加 __init__.py Top.py

[wangml@iZwz976helaylvgqok97prZ pythoncode]$ ls Test
__init__.py __pycache__ Top.py
[wangml@iZwz976helaylvgqok97prZ Test]$ cat Top.py
def top():
print("Top!")
return
接下来,我们创建一个在与 Test 在同一目录层次的 Test.py 文件,在它里面导入Test包
并引用Test包中包含的模块 Top 中的函数 top

[wangml@iZwz976helaylvgqok97prZ pythoncode]$ cat Test.py
import Test
Test.Top.top()
执行Test.py这个文件,我们会看到什么呢?是输出 "Top!" 吗?
[wangml@iZwz976helaylvgqok97prZ pythoncode]$ python3 Test.py
Traceback (most recent call last):
File "Test.py", line 2, in <module>
Test.Top.top()
AttributeError: module 'Test' has no attribute 'Top'
我们看到上面的输出结果,提示在 Test 中并没有找到模块 Top ,这是为什么呢?
问题出在 __init__.py 文件上,我么来看一下 __init__.py 文件

[wangml@iZwz976helaylvgqok97prZ Test]$ cat __init__.py
这是一个空文件。我们在前面说过,每个包文件内都需要包含一个 __init__.py 文件,只
有这样,这个文件夹才能被识别为一个Package,否则就仅仅是一个文件夹
而在上面的出错消息中我们看到,出错的在第二行, 证明 Test 这个包被成功导入了,但
第二行出了错,在 Test 内找不到 Top 这个模块。但我们已经将 Top.py 文件放在了Test
这个文件夹下的,为何会找不到呢?原因还是在 __init__.py  文件上。 虽然 Test 内有
__init__.py  文件,但仅仅这样,我们只能使 Test 被识别为一个Package, 而无法引用
内部的模块。我们需要在 __init__.py 文件中先导入 Top 模块,才能在外部导入 Test包
时使用这些模块,下面我们修改一下 __init__.py 文件,再执行Test.py看看结果:

[wangml@iZwz976helaylvgqok97prZ Test]$ vim __init__.py
[wangml@iZwz976helaylvgqok97prZ Test]$ cat __init__.py
from Test import Top
[wangml@iZwz976helaylvgqok97prZ Test]$ cd ../
[wangml@iZwz976helaylvgqok97prZ pythoncode]$ python3 Test.py
Top!

和我们设想的一样,输出了 "Top!"

Python 包的制作(__init__.py)的更多相关文章

  1. Python自定义Module中__init__.py文件介绍

    ./pyModuleTest/├── addutil│   ├── add.py│   ├── add.pyc│   ├── __init__.py│   ├── __init__.pyc│   └─ ...

  2. Python学习笔记之__init__.py文件的作用

    参考地址:http://www.cnblogs.com/Lands-ljk/p/5880483.html Python __init__.py 作用详解 __init__.py 文件的作用是将文件夹变 ...

  3. python 模块中的 __init__.py __main__.py

    python中文件夹想作为一个模块被引用,则在文件夹内必须要包含 __init__.py 文件,即使此文件为空. 如果此模块想要运行则必须要包含 __main__.py 文件.接下来说下两个文件起到的 ...

  4. 关于python 的空的__init__.py文件的作用,可不可以删除,到底有没有用?

    0.声明,本篇只讨论空__init__.py文件的情况,不顾前提非得说__init__.py文件里面也可以写东西的不在此讨论了范围之内,重点是个"空"字. 1.很多地方的文件夹都有 ...

  5. python学习笔记:__init__.py的作用

    package标识,而非文件夹. 在pycharm中new,有Directory和Python Package两个选项. 分别创建Directory和package,发现前者只是一个空目录,后者包含一 ...

  6. python 目录下的__init__.py

    1 一个目录要成为一个package必须有__init__.py文件 The __init__.py files are required to make Python treat the direc ...

  7. 解决 ImportError: cannot import name 'initializations' from 'keras' (C:\Users\admin\AppData\Roaming\Python\Python37\site-packages\keras\__init__.py)

    解决 ImportError: cannot import name 'initializations' from 'keras' : [原因剖析] 上述代码用的是 Keras version: '1 ...

  8. 第10.10节 Python使用__init__.py自动加载包下内容

    在前面章节老猿介绍了包下模块及子包的加载的各种方式,并说明包的加载首先是自动加载包下的__init__.py文件.在<第10.6节 Python包的概念>中介绍了__init__.py文件 ...

  9. Python __init__.py 作用详解

    __init__.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件. 通常__init__.py 文件为空,但是我们还可以为它增加 ...

随机推荐

  1. Python开发:模块

    在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了. 为此 Python 提供了一个办法,把这些定义存放在文 ...

  2. Leetcode 337.大家结舍III

    打家劫舍III 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称之为"根".除了"根"之外,每栋房子有且只有 ...

  3. Caffe 编译: undefined reference to imencode()

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/52150781 整理之前编译工程中遇到的 ...

  4. javascript前端下载

    <html> <head> <title>测试标题</title> </head> <body> <div> 测试页 ...

  5. SPOJ-New Distinct Substrings,注意会爆int

    SUBST1 - New Distinct Substrings 和上一题题意一样,只是数据范围有所改动,50000. 思路还是和上一题一样,所有字串数(len+1)*len/2.注意这里可能爆int ...

  6. POJ——3126Prime Path(双向BFS+素数筛打表)

    Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16272   Accepted: 9195 Descr ...

  7. Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询

    在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方 ...

  8. 【CCF】交通规划 Dijstra变形 优先级队列重载

    [题意] 给定一个无向图,求这个图满足所有点到顶点的最短路径不变的最小生成树 [AC] 注意双向边要开2*maxm 注意优先级队列 参考https://www.cnblogs.com/cielosun ...

  9. Java面试题集(六)

    以下为框架补充部分: Struts 2中,Action通过什么方式获得用户从页面输入的数据,又是通过什么方式把其自身的数据传给视图的? Action从页面获取数据有三种方式: ①通过Action属性接 ...

  10. Python入门--番外--中文目录乱码问题

    写Python的程序,读取含有中文目录下的文件,结果发现根本读取不了该中文目录下的文件, 原因:通过调试发现:该文件的目录乱码,目录无法解析,自然导致无法读取文件内容 解决方法: strPath = ...