Python 包的制作(__init__.py)
Posted 荒唐了年少
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 包的制作(__init__.py)相关的知识,希望对你有一定的参考价值。
如何制作一个自己的包:
首先,需要创建一个文件夹,将其作为顶层包,在此文件夹内我们可以定义各个不同的子文
件夹与 .py 文件作为各个子包与模块
注意:在每个包文件夹下都需要有一个 __init__.py 文件,此文件可以为空
首先,需要创建一个文件夹,将其作为顶层包,在此文件夹内我们可以定义各个不同的子文
件夹与 .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
并引用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 文件
问题出在 __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看看结果:
和我们设想的一样,输出了 "Top!"
有这样,这个文件夹才能被识别为一个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)的主要内容,如果未能解决你的问题,请参考以下文章