python packages是什么意思
创始人
2024-11-13 08:07:24
0

package指的就是包,它是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。通俗一点:包是一个包含__init__.py 文件的目录,该目录下一定得有这个__init__.py文件和其它模块或子包。

但是这会分为两种情况,第一种情况是一个空的__init__.py文件,另外一个情况是写了代码的__init__.py文件。不管是空的还是有内容的,这个目录都会被认为是一个package,这是一个标识。

package的初始化工作

一个package 被导入,不管在什么时候__init__.py的代码都只会被执行一次

>>> import package hello world >>> import package >>> import package

由于 package 被导入时 __init__.py 中的可执行代码会被执行,所以小心在 package 中放置你的代码,尽可能消除它们产生的副作用,比如把代码尽可能的进行封装成函数或类。

__init__.py内的导入顺序

当我尝试导入

from package import something

import语句会首先检查something是不是__init__.py的变量,然后检查是不是subpackage,再检查是不是module,最后抛出ImportError。

所以检查顺序如下:

(1)__init__.py 文件内变量

(2)是不是package内的subpackage

(3)是不是package内的module

看个例子

我们有一个如下结构的package

在a.py文件内有一个函数

def bar():     print("Hello, function 'bar' from module 'a' calling")

在b.py文件内有一个函数

def foo():     print("Hello, function 'foo' from module 'b' calling")

然后我们添加一个空的__init__.py 文件在simple_package里面。

我们看下,当我们import simple_package的时候到底会发生什么事情(在simple_package内激活Python shell或者simple_package的路径被包含在python的sys.path或者在PYTHONPATH的环境变量中)

>>> import simple_package >>>  >>> simple_package  >>>  >>> simple_package.a Traceback (most recent call last):   File "", line 1, in  NameError: name 'a' is not defined >>>  >>> simple_package.b Traceback (most recent call last):   File "", line 1, in  NameError: name 'b' is not defined

我们可以看到simple_package已经被成功导入,但是a.py和b.py并没有被导入

当然了,如果你希望使用import simple_package后自动加载a或者b 模块,这里有两种办法。

第一种就是在__init__.py内导入a或者b模块,然后保存再激活python的交互环境

#__init__.py import a import b

当你再次尝试import simple_package后,就可以使用simple_package.a.bar()来使用模块a中的bar()函数了。

第二办法就是手动导入,当你想使用模块a中的bar()函数时,需要手动导入

import simple_package.a as a

然后就是可以a.bar()来使用bar()函数了。

相关内容

热门资讯

黑科技黑科技挂!德州ai辅助有... 黑科技黑科技挂!德州ai辅助有用(德州ai辅助神器软件)本来是有挂(有挂透明挂)-哔哩哔哩1、任何德...
黑科技美元局!红龙扑克怎么看底... 黑科技美元局!红龙扑克怎么看底牌(微扑克系统发好牌)原来真的有挂(有挂辅助挂)-哔哩哔哩1、每一步都...
黑科技黑科技!微扑克wpk透视... 黑科技黑科技!微扑克wpk透视辅助在哪下(wepoke智能ai)好像是有挂(有挂ai辅助)-哔哩哔哩...
黑科技神器!德州之星有没有假(... 黑科技神器!德州之星有没有假(德州ai人工智能)其实是有挂(有挂软件透明挂)-哔哩哔哩;1、操作简单...
黑科技软件!aapoker透明... 黑科技软件!aapoker透明挂下载(aapoker真的有猫腻)都是是有挂(有挂透明挂)-哔哩哔哩;...
黑科技黑科技!wepoke用模... 黑科技黑科技!wepoke用模拟器(德州ai辅助神器软件)都是真的有挂(有挂透视)-哔哩哔哩1、下载...
黑科技有挂!红龙扑克外挂(微扑... 黑科技有挂!红龙扑克外挂(微扑克真的有挂)确实是有挂(有挂ai辅助)-哔哩哔哩;1、上手简单,内置详...
黑科技科技!德州之星辅助器怎么... 黑科技科技!德州之星辅助器怎么用(德州辅助神器软件)原来存在有挂(有挂智能ai)-哔哩哔哩;1、全新...
黑科技好友房!wepokeai... 黑科技好友房!wepokeai代打的胜率(aapoker辅助工具ai)总是真的有挂(有挂黑科技ai)...
黑科技插件!红龙扑克插件(微扑... 黑科技插件!红龙扑克插件(微扑克真的有挂)切实有挂(有挂透视)-哔哩哔哩;1、黑科技插件!红龙扑克插...