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

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

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

  1. [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看看结果:

  1. [wangml@iZwz976helaylvgqok97prZ Test]$ vim __init__.py
  2. [wangml@iZwz976helaylvgqok97prZ Test]$ cat __init__.py
  3. from Test import Top
  4. [wangml@iZwz976helaylvgqok97prZ Test]$ cd ../
  5. [wangml@iZwz976helaylvgqok97prZ pythoncode]$ python3 Test.py
  6. 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. Linux下二进制文件安装MySQL

    MySQL 下载地址:https://dev.mysql.com/downloads/mysql/ 并按如下方式选择来下载安装包. 1. 设置配置文件/etc/my.cnmore /etc/my.cn ...

  2. BRVAH(让RecyclerView变得更高效)(1)

    本文来自网易云社区 作者:吴思博 对于RecyclerView, 我们重复编写着那一个又一个的列表界面,有的要分组,有的要添加广告头部.有的要不同类型item排列.等等需求,主要代码有大部分是重复的, ...

  3. Decorator(装饰器模式)

    装饰器模式允许我们根据运行时不同的情景动态地为某个对象调用前后添加不同的行为动作. <?php class HtmlTemplate { // any parent class methods ...

  4. ubuntu14.04 Cannot find OpenSSL's <evp.h>

    Cannot find OpenSSL's <evp.h> when i configure php7 manually,i get trouble with that problem,f ...

  5. ASP.NET(四):ASP.net实现假分页显示数据

    导读:在做数据查询的时候,有的时候查询到的数据有很多.通常呢,我们一般都是去拖动右侧边的滚动条.但是,有了分页后,我们就可以不必是使用滚动条,而直接通过分页查看我们想要的数据.在分页的过程中,有分为真 ...

  6. EasyUI 动态生成列加分页

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...

  7. [BZOJ3611] [Heoi2014]大工程(DP + 虚树)

    传送门 $dp[i][0]$表示节点i到子树中的所有点的距离之和 $dp[i][1]$表示节点i到子树中最近距离的点的距离 $dp[i][2]$表示节点i到子树中最远距离的点的距离 建好虚树后dp即可 ...

  8. [BZOJ1575] [Usaco2009 Jan]气象牛Baric(DP)

    传送门 DP f[i][j]表示前i个中选j个的最优解 预处理g[i][j]表示选i~j对答案的贡献 那么就可以n^3乱搞了! 注意边界 #include <cstdio> #includ ...

  9. hdu4035 Maze (树上dp求期望)

    dp求期望的题. 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点1处(概率为ki) 2.找到出口,走出迷宫 ...

  10. python操作excel--生成图表

    [问题] 想要折腾Python中的Excel中的图标,Chart,Graph. [解决过程] 1.参考: use python to generate graph in excel 说是可以用pywi ...