当前位置: 首页 > news >正文

Python中包(package)与模块(module)的概念 以及 import 问题

目录

  • Python中 包(package) 与 模块(module) 的概念
      • 一. Python中, 包 (package) 与 模块 (module) 的概念
        • 1. 一个有 `__init__.py` 文件 的目录, 被视为一个 Python 的 包 (package)
        • 2. 一个Python源文件 , 被视为一个模块 (module)
      • 二. 不同包之间 以及 同一个包的不同模块之间的导入问题
        • 1. 同级目录下不同包之间的导入问题
        • 2. 同一个包的不同模块之间的导入问题

Python中 包(package) 与 模块(module) 的概念

一. Python中, 包 (package) 与 模块 (module) 的概念

1. 一个有 __init__.py 文件 的目录, 被视为一个 Python 的 包 (package)

         一个包可以有多个模块(Python源文件), 即包所在目录下可以有多个Python源文件, 每个Python源文件都是一个Python模块

2. 一个Python源文件 , 被视为一个模块 (module)



二. 不同包之间 以及 同一个包的不同模块之间的导入问题

正确导入方式:

  • 同目录下的不同包之间的导入方式:
    import <pkg>: 
    from <pkg> import <module>:
    from <pkg>.<module> import <*> | <export-item>
    
  • 同一个包的不同模块之间的导入
    # 导入同级目录其他模块:
    from .<other_module> import <*> | <export-item># 导入上级目录中的模块:
    from ..<other_module> import <*> | <export-item># 导入下级目录中的模块:
    from <directory>.<other_module> import <*> | <export-item>
    

注意:

  • 不能使用使用
    import .xxx
    或
    import ..xxx
    或
    from .xxx import yyy
    或
    from ..xxx import yyy
    
    来导入同级目录下的其他package;
  • 同一个package不同module 之间, 不能用 import xxx 的方式导入, 只能用 from xxx import yyy 的方式导入
1. 同级目录下不同包之间的导入问题
# 1. 同级目录下的package之间, 可以使用下列方式进行导入:
# 下面是项目的目录结构:
WorkDirectory/				# 项目根目录 (也是python命令运行的工作目录)
|   main.py					# 测试文件, 程序执行入口所在文件
|
+---pkg1					# 模块一
|       a.py
|       __init__.py
|
\---pkg2					# 模块二b.py__init__.py# 执行:
# 1. cd 到WorkDirectory目录
# 2. 执行: python .\main.py###################################################################
b.py 文件源码:
def b_method():print('this is pkg2 (package), module b')a.py 文件源码:
# import pkg2.b
# from pkg2 import b
from pkg2.b import b_method
def a_method():print('this is pkg1 (package), module a')# pkg2.b.b_method() # 对应: import pkg2.b# b.b_method()      # 对应: from pkg2 import bb_method()          # 对应: from pkg2.b import b_methodmain.py 文件源码: 
# import pkg1.a
# from pkg1 import a
from pkg1.a import a_methodif __name__ == "__main__":# pkg1.a.a_method() # 对应: import pkg1.a# a.a_method()        # 对应: from pkg1 import aa_method()          # 对应: from pkg1.a import a_metho
2. 同一个包的不同模块之间的导入问题
# 2. 同一个package内部不同模块之间的导入
# 下面是项目的目录结构:
WorkDirectory/			# 项目根目录 (也是python命令运行的工作目录)
│  main.py				# 
│
└─module1a.pyb.py__init__.py# 执行:
# 1. cd 到WorkDirectory目录
# 2. 执行: python .\main.py######################################################################
b.py 源文件代码:
def b_method():print('this is module b, method b_method()')a.py 源文件代码:
from .b import b_method
# from b import b_method # ModuleNotFoundError: No module named 'b'def a_method():print('this is module a, method a_method()')b_method()main.py 源文件代码:
# import module1.a
from module1.a import a_methodif __name__ == "__main__":# module1.a.a_method()  # 对应: import module1.aa_method()  # 对应: from module1.a import a_method

相关文章:

Python中包(package)与模块(module)的概念 以及 import 问题

目录 Python中 包(package) 与 模块(module) 的概念一. Python中, 包 (package) 与 模块 (module) 的概念1. 一个有 __init__.py 文件 的目录, 被视为一个 Python 的 包 (package)2. 一个Python源文件 , 被视为一个模块 (module) 二. 不同包之间 以及 同一个包的不同模块之间的…...

Android常见内存泄漏场景总结

一、非静态内部类造成的内存泄漏 造成原因&#xff1a;非静态内部类默认会持有外部类的引用&#xff0c;如果内部类的生命周期超过了外部类就会造成内存泄漏。 场景&#xff1a;当Activity销毁后&#xff0c;由于内部类中存在异步耗时任务还在执行&#xff0c;导致Activity实…...

未来已来:Angular、React、Vue.js——前端框架的三大巨头

目录 前言 一、Angular框架 特点和优势 核心技术和应用场景 二、React框架 特点和优势 核心技术和应用场景 三、Vue.js框架 特点和优势 核心技术和应用场景 总结&#xff1a; 前言 在Web前端开发领域&#xff0c;随着技术的不断发展&#xff0c;出现了众多优秀的框…...

Mybatis06-动态SQL

动态SQL 1.什么是动态SQL 什么是动态SQL&#xff1a;动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句. 类似JSTL标签 官网描述&#xff1a; MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验&#xff0c;你就能体会到根据不同条件拼接…...

26-LINUX--I/O复用-select

一.I/O复用概述 /O复用使得多个程序能够同时监听多个文件描述符&#xff0c;对提高程序的性能有很大帮助。以下情况适用于I/O复用技术&#xff1a; ◼ TCP 服务器同时要处理监听套接字和连接套接字。 ◼ 服务器要同时处理 TCP 请求和 UDP 请求。 ◼ 程序要同时处理多个套接…...

spring源码解析-(2)Bean的包扫描

包扫描的过程 测试代码&#xff1a; // 扫描指定包下的所有类 BeanDefinitionRegistry registry new SimpleBeanDefinitionRegistry(); // 扫描指定包下的所有类 ClassPathBeanDefinitionScanner scanner new ClassPathBeanDefinitionScanner(registry); scanner.scan(&quo…...

Java 数学计算 - Random类

在Java中&#xff0c;Random类用于生成伪随机数。这个类在java.util包中&#xff0c;你可以使用它来生成整数、浮点数等不同类型的随机数。以下是关于Random类的一些学习笔记和示例。 1. 创建Random对象 首先&#xff0c;你需要创建一个Random对象。默认情况下&#xff0c;如…...

Ubuntu22.04之解决:无法关机和重启问题(二百四十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…...

大学数字媒体艺术设计网页设计试题及答案,分享几个实用搜题和学习工具 #媒体#职场发展

现在读书可不像小时候&#xff0c;以前想要校对试题答案&#xff0c;都得找到对应的纸质版答案查看&#xff0c;而且有的还只有答案&#xff0c;没有解析&#xff0c;无法弄清楚答案的由来。但是现在不一样了&#xff0c;现在我们可以通过搜题软件&#xff0c;寻找试题的答案&a…...

【ArcGIS微课1000例】0119:TIFF与grid格式互相转换

文章目录 一、任务描述二、tiff转grid三、grid转tif四、注意事项一、任务描述 地理栅格数据常用TIFF格式和GRID格式进行存储。TIFF格式的栅格数据常以单文件形式存储,不仅存储有R、G、B三波段的像素值,还保存有地理坐标信息。GRID格式的栅格数据常以多文件的形式进行存储,且…...

B3870 [GESP202309 四级] 变长编码

[GESP202309 四级] 变长编码 题目描述 小明刚刚学习了三种整数编码方式&#xff1a;原码、反码、补码&#xff0c;并了解到计算机存储整数通常使用补码。但他总是觉得&#xff0c;生活中很少用到 2 31 − 1 2^{31}-1 231−1 这么大的数&#xff0c;生活中常用的 0 ∼ 100 0…...

WordPress网站更换域名后如何重新激活elementor

在创建WordPress网站时&#xff0c;我们常常需要更改域名。但是&#xff0c;在更换域名后&#xff0c;你可能会遇到一个问题&#xff1a;WordPress后台中的Elementor插件授权状态会显示为不匹配。这时&#xff0c;就需要重新激活Elementor插件的授权。下面我会详细说明如何操作…...

linux cron 执行url

linux cron 执行url 在Linux中&#xff0c;你可以使用curl或wget来执行URL。如果你想要定期执行这个操作&#xff0c;可以使用cron来设置定时任务。 以下是一个使用curl在cron中执行URL的例子&#xff1a; 打开终端。 输入 crontab -e 命令来编辑你的cron作业。 添加一个新…...

压缩视频在线压缩网站,压缩视频在线压缩工具软件

在数字化时代&#xff0c;视频成为了人们记录和分享生活的重要载体。然而&#xff0c;视频文件一般都非常大&#xff0c;这不仅占据了大量的存储空间&#xff0c;也给视频的传输和分享带来了不便。因此&#xff0c;压缩视频成为了许多人必须掌握的技能。本文将详细介绍如何压缩…...

linux经典例题编程

编写Shell脚本&#xff0c;计算1~100的和 首先vi 1.sh,创建一个名为1.sh的脚本&#xff0c;然后赋予这个脚本权限&#xff0c;使用命令chmod 755 1.sh&#xff0c;然后就可以在脚本中写程序&#xff0c;然后运行。 shell脚本内容 运行结果&#xff1a; 编写Shell脚本&#xf…...

二叉树的实现(初阶数据结构)

1.二叉树的概念及结构 1.1 概念 一棵二叉树是结点的一个有限集合&#xff0c;该集合&#xff1a; 1.或者为空 2.由一个根结点加上两棵别称为左子树和右子树的二叉树组成 从上图可以看出&#xff1a; 1.二叉树不存在度大于2的结点 2.二叉树的子树有左右之分&#xff0c;次序不能…...

C++笔试强训day41

目录 1.棋子翻转 2.宵暗的妖怪 3.过桥 1.棋子翻转 链接https://www.nowcoder.com/practice/a8c89dc768c84ec29cbf9ca065e3f6b4?tpId128&tqId33769&ru/exam/oj &#xff08;简单题&#xff09;对题意进行简单模拟即可&#xff1a; class Solution { public:int dx[…...

【JavaScript】内置对象 - 字符串对象 ⑤ ( 判断对象中是否有某个属性 | 统计字符串中每个字符出现的次数 )

文章目录 一、判断对象中是否有某个属性1、获取对象属性2、判定对象是否有某个属性 二、统计字符串中每个字符出现的次数1、算法分析2、代码示例 String 字符串对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String 一、判…...

Linux环境下测试服务器的DDR5内存性能

要在Linux环境下测试服务器的DDR5内存性能&#xff0c;可以采用以下几种方法和工具&#xff1a; ### 测试原理 内存性能测试主要关注以下几个关键指标&#xff1a; - **带宽**&#xff1a;内存每秒能传输的数据量。 - **延迟**&#xff1a;内存访问请求从发出到完成所需的时间…...

19、matlab信号预处理中的中值滤波(medfilt1()函数)和萨维茨基-戈雷滤波滤(sgolayfilt()函数)

1、中值滤波&#xff1a;medfilt1()函数 说明&#xff1a;一维中值滤波 1&#xff09;语法 语法1&#xff1a;y medfilt1(x) 将输入向量x应用3阶一维中值滤波器。 语法2&#xff1a;y medfilt1(x,n) 将一个n阶一维中值滤波器应用于x。 语法3&#xff1a;y medfilt1(x,n…...

Scala 练习一 将Mysql表数据导入HBase

Scala 练习一 将Mysql表数据导入HBase 续第一篇&#xff1a;Java代码将Mysql表数据导入HBase表 源码仓库地址&#xff1a;https://gitee.com/leaf-domain/data-to-hbase 一、整体介绍二、依赖三、测试结果四、源码 一、整体介绍 HBase特质 连接HBase, 创建HBase执行对象 初始化…...

前端工程化:基于Vue.js 3.0的设计与实践

这里写目录标题 《前端工程化&#xff1a;基于Vue.js 3.0的设计与实践》书籍引言本书概述主要内容作者简介为什么选择这本书&#xff1f;结语 《前端工程化&#xff1a;基于Vue.js 3.0的设计与实践》书籍 够买连接—>https://item.jd.com/13952512.html 引言 在前端技术日…...

Linux☞进程控制

在终端执行命令时&#xff0c;Linux会建立进程&#xff0c;程序执行完&#xff0c;进程会被终止&#xff1b;Linux是一个多任务的OS,允许多个进程并发运行&#xff1b; Linxu中启动进程的两种途径&#xff1a; ①手动启动(前台进程(命令gedit)...后台进程(命令‘&’)) ②…...

mybatis离谱bug乱转类型

字符串传入的参数被转成了int&#xff1a; Param("online") String online<if test"online 0">and (heart_time is null or heart_time <![CDATA[ < ]]> UNIX_TIMESTAMP(SUBDATE(now(),INTERVAL 8 MINUTE)) )</if><if test"…...

视频监控管理平台LntonCVS视频汇聚平台充电桩视频监控应用方案

随着新能源汽车的广泛使用&#xff0c;公众对充电设施的安全性和可靠性日益重视。为了提高充电桩的安全管理和站点运营效率&#xff0c;LntonCVS公司推出了一套全面的新能源汽车充电桩视频监控与管理解决方案。 该方案通过安装高分辨率摄像头&#xff0c;对充电桩及其周边区域进…...

VS环境Python:深度探索与实用指南

VS环境Python&#xff1a;深度探索与实用指南 在编程领域&#xff0c;VS环境&#xff08;Visual Studio环境&#xff09;与Python的结合&#xff0c;为开发者们提供了一种强大而灵活的开发体验。这种结合不仅提升了开发效率&#xff0c;还增强了代码的可读性和可维护性。然而&…...

SpringBoot整合SpringSecurit(二)通过token进行访问

在文章&#xff1a;SpringBoot整合SpringSecurit&#xff08;一&#xff09;实现ajax的登录、退出、权限校验-CSDN博客 里面&#xff0c;使用的session的方式进行保存用户信息的&#xff0c;这一篇文章就是使用token的方式。 在其上进行的改造&#xff0c;可以先看SpringBoot…...

【算法训练 day50 打家劫舍、打家劫舍Ⅱ、打家劫舍Ⅲ】

目录 一、打家劫舍-LeetCode 198思路 二、打家劫舍Ⅱ-LeetCode 213思路 三.打家劫舍Ⅲ-LeeCode 337思路 一、打家劫舍-LeetCode 198 Leecode链接: leetcode 198 思路 dp数组含义为&#xff1a;当前数组范围下能偷到的最多的钱。递推公式为:dp[j] max(dp[j-2]nums[j],dp[j-1…...

YOLOv8改进 | 卷积模块 | 在主干网络中添加/替换蛇形卷积Dynamic Snake Convolution

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 蛇形动态卷积是一种新型的卷积操作&#xff0c;旨在提高对细长和弯曲的管状结构的特征提取能力。它通过自适应地调整卷积核的权重&#xff0…...

深入解析力扣183题:从不订购的客户(LEFT JOIN与子查询方法详解)

关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业分析/数据结构与算法学习资料 在本篇文章中&#xff0c;我们将详细解读力扣第183题“从不订购的客户”。通过学习本篇文章&#xff0c;读者将掌握如何使用SQL语句来解决这一问题&#xff0c;并了解相关的复杂…...

做网站容易挣钱吗/网络营销策划方案书范文

实现一个对整形数组的冒泡排序 #include<stdio.h> #include<stdlib.h> void bubblesort(int arr[], int size){ //数组若被传参会隐式成指针. //升序排列for (int bound 0; bound < size; bound){//此处的bound是边界,[0,bound)是已完成排序区间,[bound,size)…...

杭州网站开发响应式/手机网站制作教程

木马检测技术旨在验证所设计或者制造的芯片是否感染了硬件木马。 目录 一、流片前检测 1.1 功能验证 1.2 电路设计分析 1.3 形式化验证 二、流片后检测 2.1 破坏性检测方法 2.2 非破坏性检测方法 2.2.1 非破坏性逆向工程 2.2.2 逻辑测试 2.2.3 侧信道分析 主要在两个…...

python可以做网站开发吗/淘宝大数据查询平台

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。matlab坐标轴范围的设置方法是&#xff1a;1、打开matlab&#xff0c;输入“x0:0.1:100&#xff1b;ysin(x)100&#xff1b;plot(x&#xff0c;y)”画出一个正弦函数图像。2、可以看…...

WordPress书籍插件/上首页seo

硬盘是用来存储数据的&#xff0c;为了使用和管理方便&#xff0c;这些数据以文件的形式存储在硬盘上。任何操作系统都有自己的文件管理系统&#xff0c;不同的文件系统又有各自不同的逻辑组织方式。例如&#xff1a;常见的文件系统有FAT&#xff0c;NTFS&#xff0c;EXT&#…...

单位网站维护 网站建设岗位/seo顾问服务咨询

一、开关电源的电路组成开关电源的主要电路是由输入电磁干扰滤波器(EMI)、整流滤波电路、功率变换电路、PWM控制器电路、输出整流滤波电路组成。辅助电路有输入过欠压保护电路、输出过欠压保护电路、输出过流保护电路、输出短路保护电路等。开关电源的电路组成方框图如下&#…...

龙岩网站制作/国内b2b十大平台排名

最近接了个美国的小项目&#xff0c;主要需求是把盘点机导出的数据&#xff08;DBF格式&#xff09;和另外的数据&#xff08;csv格式&#xff09;合并生成新的数据表&#xff0c;方便查询纠错。对方没有安装ms Access,考虑到对方使用方便&#xff0c;就采用了sqlite&#xff0…...