Python学习【42】:python的包管理,与__init__.py介绍

内容分享6天前发布
1 2 0

一、学前花絮

之前我们用python编写了一个“学习管理”的界面,这个程序虽然不长,但很经典。我们正好借这个程序的结构,说明一下python关于工程项目是如何管理的。

“学习管理”这个程序的结构如下:

Python学习【42】:python的包管理,与__init__.py介绍

程序框架

以上目录的说明:

  1. study_manager 是一个目录,也是整个项目的根目录。
  2. Study不仅是目录,更是一个python包。它与目录的区别在于包含了__init__.py这个初始化文件。
  3. Venv目录是虚拟环境,可以把项目运行需要的第三方依赖包都放在这里。便于后来移植到其他机器上。
  4. README.md 属于关于项目的说明性文件。让别人了解项目是干什么的。

二、python的包管理,与__init__.py介绍

下面用 一个最小但真实的 project 把两件事一次讲清:

Python 包管理(__init__.py 到底干什么的)

自定义模块怎么导入、跨目录导入不报错。

2.1 __init__.py的三种实用写法

a) 空文件 —— 仅仅“把目录标记成包”,Python 3 允许不写,但提议保留,显式优于隐式。

b) 控制导出 —— 限制 from study import * 能带走哪些名字:

Python学习【42】:python的包管理,与__init__.py介绍

控制导出

c) 缩短导入路径(最常用):

Python学习【42】:python的包管理,与__init__.py介绍

包导入

这样 包外 就可以:

import study.ui as ui # 而不是 import study.ui.ui

2.2包内模块如何相互导入

规则:包内一律用相对导入(前面带 .)。

例子:ui.py 里要实例化 DB 类

Python学习【42】:python的包管理,与__init__.py介绍

界面程序

2.3 从“项目根”启动,而不污染全局环境

在“项目根”建一个 main.py 入口,只负责跑包:

Python学习【42】:python的包管理,与__init__.py介绍

主程序

2.4 命令行一键运行(无需安装)

cd study_manager # 进到项目根

python -m study.main # -m 把当前目录当成“顶级包”

好处:

不需要把 study 装进 site-packages

相对导入不会崩(Python 自动识别 -m 包路径)

2.5 进阶:可编辑安装(pip install -e)

如果希望 任意位置 都能 import study,在项目根加 pyproject.toml(或旧版 setup.py):

# pyproject.toml

[build-system]

requires = [“setuptools”]

build-backend = “setuptools.build_meta”

[project]

name = “study”

version = “0.1.0”

然后:

python -m venv venv

source venv/bin/activate #Windows: venvScriptsactivate

pip install -e . # “可编辑”安装,改代码立即生效

三、小结

一句话总结python关于包的管理:

  • 想“目录变包”→ 放 __init__.py
  • 包内相互 import → 用 . 相对导入
  • 包外运行 → python -m 包.模块 或 pip install -e .

让我们保持学习热烈,多做练习。我们下期再见!

Python学习【42】:python的包管理,与__init__.py介绍

快乐男孩

#python#

© 版权声明

相关文章

2 条评论

您必须登录才能参与评论!
立即登录