python中的import

server/2024/11/23 23:19:33/

python__package__module_0">python 中的 package 和 module

python 名词表
教程

  1. package: 一个包含多个 module 的目录,可以包含子目录,是一种特殊的 module。
    A Python module which can contain submodules or recursively, subpackages. Technically, a package is a Python module with a __path__ attribute.
  2. module: 一个包含 python 代码的.py文件。import 语句将操作系统级别的文件导入到 python 级别(概念)的模块。
    An object that serves as an organizational unit of Python code. Modules have a namespace containing arbitrary Python objects. Modules are loaded into Python by the process of importing.

import 内部机制(absolute import)

导入模块
python">import testimport test as t   # 给 module 取别名,这样只有t变量是被定义的import test.classA   # 导入 test 包中的 classA, 导入模块,刷新缓存,但是只把classA类赋值给变量
  1. python 解释器会拿到 test 字符串作为名字来寻找 module
  2. 首先会检查缓存有没有名为 test 的 module,如果有,则直接使用缓存中的 module
  3. 如果没有,则会先看 test 是不是一个build-in module,如果是,则直接导入,并将其加入缓存
  4. 如果不是,则会在sys.path中寻找能被 load 成 test 的文件(一般为 test.py 文件),如果找到,则将其作为 package 导入
  5. 在一个单独的 namespace 中执行 module 中的代码,并将 module 中的对象添加到当前的 namespace 中,并将其加入缓存
  6. 将导入好的 module 赋值给 test 变量,并返回 test 变量,这样 test 可以作为一个变量来使用

名词解析

  • sys.path: 一个列表,包含了 python 解释器会(从前往后)搜索 module 的路径。如果是使用python example.py的形式运行脚本,则 sys.path 第一个元素为脚本所在目录,同时在 python 运行过程中,会把 python 自带的 package 路径也加入到 sys.path 中(包括 site-packages 目录即 pip install 安装的包)
  • namespace: 一个字典,包含了当前模块中定义的变量、函数、类等。
导入包
python">import mypackageimport mypackage.subpackage.moduleA
  1. package 就是一个特殊的 module, 所以导入包的过程和导入模块的过程是十分相似的
  2. 导入模块的时候,是把模块里的代码在一个单独的命名空间中执行,然后构成 module 对象,并将其加入缓存
  3. 导入包的时候,python 解释器会查看包的 __init__.py 文件,然后执行里面的代码,如果没有不会执行任何额外的代码,所以想要引用包中的模块,需要使用包名.模块名的形式来导入
  4. import package 的时候,会在一个单独的命名空间运行 __init__.py 文件,用这个命名空间来构建 package 对象,并将其加入缓存

relative import

  1. 相对导入: 导入模块或者包时,可以使用相对路径来导入,相对路径是相对于当前模块或者包的路径的
  2. 相对导入的语法是from . import moduleA,表示从当前模块的同级目录下导入 moduleA
  3. 相对导入的语法是from .. import moduleA,表示从当前模块的上级目录下导入 moduleA
  4. 相对导入的语法是from .subpackage import moduleA,表示从当前包的子包中导入 moduleA
  5. 相对导入的语法是from ..subpackage import moduleA,表示从当前包的上级包中导入 moduleA

相对导入只能在 package 里面的 module 中使用,相对导入其实就是根据 package 变量来转换成绝对路径,然后再导入模块或者包.


http://www.ppmy.cn/server/144384.html

相关文章

【ArcGISPro】使用AI模型提取要素-提取车辆(目标识别)

示例数据下载 栅格数据从网上随便找一个带有车辆的栅格数据 f094a6b1e205cd4d30a2e0f816f0c6af.jpg (1200799) (588ku.com) 添加数据

计算机网络(14)ip地址超详解

先看图: 注意看第三列蓝色标注的点不会改变,A类地址第一个比特只会是0,B类是10,C类是110,D类是1110,E类是1111. IPv4地址根据其用途和网络规模的不同,分为五个主要类别(A、B、C、D、…

Windows系统编程 - 注册表

文章目录 前言注册表介绍打开和关闭注册表RegOpenKeyExRegCloseKey测试案例 创建删除子键RegCreateKeyEx创建子键RegDeleteKey删除子键 写入删除键值RegQueryValueExRegSetValueExRegDeleteValue测试案例 子键和项的枚举RegEnumKeyExRegEnumValueRegQueryInfoKey测试案例 总结 …

【2024亚太杯亚太赛APMCM C题】数学建模竞赛|宠物行业及相关产业的发展分析与策略|建模过程+完整代码论文全解全析

第一个问题是:请基于附件 1 中的数据以及你的团队收集的额外数据,分析过去五年中国宠物行业按宠物类型的发展情况。并分析中国宠物行业发展的因素,预测未来三年中国宠物行业的发展。 第一个问题:分析中国宠物行业按宠物类型的发展…

web 中 canvas 污染 以及解决方案

在Web开发中,Canvas 污染(Canvas Tainting)是一个与安全相关的概念,通常发生在使用 元素时。为了更好理解它,我们可以从以下几个方面来解释: 1. Canvas 元素简介 HTML 元素允许开发者在网页上绘制图形&…

和为 K 的子数组(java)

题目描述: 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2示例 2: 输入&#xf…

LSTM原理解读与实战

在RNN详解及其实战中,简单讨论了为什么需要RNN这类模型、RNN的具体思路、RNN的简单实现等问题。同时,在文章结尾部分我们提到了RNN存在的梯度消失问题,及之后的一个解决方案:LSTM。因此,本篇文章主要结构如下&#xff…

Easyexcel(2-文件读取)

相关文章链接: Easyexcel(1-注解使用)Easyexcel(2-文件读取) 同步读取 读取单个Sheet 通过sheet方法指定对应的Sheet名称或下标读取文件信息通过doReadSync方法实现同步读取 Data public class UserExcel {ExcelI…