Python 的 module 和 package

博客

博客地址:IT老兵驿站

概要

正式使用 Python 也有一年多了,对于 Python 的 module 和 package 却感觉一直没有搞明白,当然,对于这一点,已经查阅过一些资料,有一篇帖子讲的是非常到位的,只是自己一直没有看透,或者换一句话,好像没有好好做做笔记,整理一下,这块知识点就一直没有成为自己知识体系的一员。

参考的帖子地址是:https://realpython.com/python-modules-packages/,讲的非常清楚,这次对它做一些笔记,这次是笔记和原文进行分离,笔记记录的是抽取出来的主旨。

正文

建立 module 的好处

Simplicity:
还是分而治之的理念,简化问题。

Maintainability:
模块便于去维护,最小化了依赖。

Reusability:
提高了重用性。

Scoping: Modules typically define a separate namespace, which helps avoid collisions between identifiers in different areas of a program. (One of the tenets in the Zen of Python is Namespaces are one honking great idea—let’s do more of those!)
约束了范围。
这里的 namespace 还有些没有搞明白。

模块的编写方式

使用 Python 编写。

使用 C 语言来编写,同时动态加载,如何在运行时动态加载呢?

内建的模块。
包含在解释器里面的内在的模块。

模块查找路径

当前目录。

PYTHONPATH 环境变量设置的目录。

Python 安装时配置的依赖目录。

可以这样获取查找路径:
在这里插入图片描述
动态改变查找路径的方式:

import 语句

这里涉及到了符号表的概念,如同 C 语言一样。

import

from import <name(s)>

from import as

import as

这几种引用方式主要是防止符号表名称污染。

dir() 方法

用来展示符号表。

参考

https://realpython.com/python-modules-packages/
https://packaging.python.org/tutorials/packaging-projects/ setup.py 的格式
https://pip.pypa.io/en/stable/reference/pip_install/ pip 的介绍