Python项目打包与部署(二): __init__.py的作用及内容

其它章节

通常在python项目的源代码子目录下都看到1个__init__.py文件,django-admin startproject 命令生成的项目结构中也有__init__.py文件,
project_structure

那么,为什么要加1个__init__.py`文件,其究竟有什么用,应该向里面写什么内容呢?

1. __init__.py文件的作用

__init__.py文件,如果与类定义相比,它相当于是 python package 的constructor 构造方法, 其作用是,告诉python解释器,要把本目录下哪些的函数导进包,以及这些函数位于哪些文件中。

  • __init__.py文件可以为空.
  • 不能把其它同级目录的文件导入此package中。

2. 如何使用__init__.py

下面用实例来说明 __init__.py 是如何工作的,以及应该写什么内容。

(1)在__init__.py文件中,导入需要的模块

my_package/__init__,.py中,输入以下代码,将此目录下.file1, .file2,.file3文件的函数 func_1, func_2, func_3 导入包my_package,但不包含其它函数模块

from .file1 import func_1 
# Where func_1 is the name of the function and .file1 is the name of the module/file
from .file2 import func_2
from .file3 import func_3

这种方式,只是导入了代码文件中所需要的模块。

让我们用实例来看看,导入模块的另1种方式:
在package目录下,创建1个main,.py , 在main.py中直接导入整个 my_package,下例中,可以看到,前面例子中没有的,func_5() 也导入了。

import my_package  # this imports the entire module 
# 调用func_1() 
my_package.func_1() 
my_packagee.func_2()
my_packagee.func_3()
my_packagee.func_5()

(2) 设置 __all__ 参数

Python解释器在导入包时,如果 __init__.py中设置__all__ 列表变量, 则 from package import * 语句导入__all__中包含的所有模块或全局变量。如, __all__ = ["func_1", "func_2", "func_3"],然后在 main.py 中 from my_package import * 执行时,最终只有3个模块被导入:

from my_package import *
my_packagee.func_1() 
my_packagee.func_2()
my_packagee.func_3()

在实际编写代码时,尽量不要用import * 来导入包中所有模块与全局变量,以避免未知的命名冲突。

(3) 导入子目录下的包

示例项目文件结构如下:

sample/
├── docs/
├── main.py
├── my_package2/
│   ├── __init__.py
│   └── create.py

如果 main.py中需要调用子目录 my_package2下的create方法, my_package2子目录下必须有1个__init__,py文件,然后才能在main,py中导入, 这就是为什么项目的源代码子目录下总放1个 __init__,py 文件的原因。

main.py 的 import 代码如下:

from my_package2 import create
# or 
importmy_package2.create

----如果不妥之处,欢迎指正---

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python中,包是一种组织Python模块的方法,它将相关的模块组合在一起,形成一个大的模块。包可以包含子包和模块,以及其他资源文件。 在一个包目录中,通常会有一个名为`__init__.py`的文件。这个文件的主要作用是标识该目录为Python包,同时可以在其中编写一些初始化代码。 `__init__.py`可以为空文件,也可以包含Python代码。如果`__init__.py`文件存在,则在导入包时会自动执行其中的代码。这就使得我们可以在包的初始化过程中完成一些需要执行的操作,例如设置环境变量、导入必要的模块等。 例如,如果我们有一个名为`mypackage`的包,那么它的目录结构可能如下所示: ``` mypackage/ __init__.py module1.py module2.py ``` 其中,`__init__.py`可以包含一些初始化代码,例如: ```python # 在 __init__.py 中导入模块 from .module1 import * from .module2 import * ``` 这样,在导入`mypackage`包时,就会自动导入`module1`和`module2`模块。 此外,`__init__.py`还可以定义包级别的变量和函数,供包内的模块使用。例如: ```python # 定义包级别的变量 PI = 3.14 # 定义包级别的函数 def square(x): return x ** 2 ``` 这样,在包内的模块中,我们就可以直接使用`mypackage.PI`和`mypackage.square()`来访问这些变量和函数了。 总之,`__init__.py`文件是Python包的重要组成部分,它可以帮助我们更好地组织和管理Python代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值