当前位置: 首页 > 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
http://www.lryc.cn/news/367320.html

相关文章:

  • Android常见内存泄漏场景总结
  • 未来已来:Angular、React、Vue.js——前端框架的三大巨头
  • Mybatis06-动态SQL
  • 26-LINUX--I/O复用-select
  • spring源码解析-(2)Bean的包扫描
  • Java 数学计算 - Random类
  • Ubuntu22.04之解决:无法关机和重启问题(二百四十三)
  • 大学数字媒体艺术设计网页设计试题及答案,分享几个实用搜题和学习工具 #媒体#职场发展
  • 【ArcGIS微课1000例】0119:TIFF与grid格式互相转换
  • B3870 [GESP202309 四级] 变长编码
  • WordPress网站更换域名后如何重新激活elementor
  • linux cron 执行url
  • 压缩视频在线压缩网站,压缩视频在线压缩工具软件
  • linux经典例题编程
  • 二叉树的实现(初阶数据结构)
  • C++笔试强训day41
  • 【JavaScript】内置对象 - 字符串对象 ⑤ ( 判断对象中是否有某个属性 | 统计字符串中每个字符出现的次数 )
  • Linux环境下测试服务器的DDR5内存性能
  • 19、matlab信号预处理中的中值滤波(medfilt1()函数)和萨维茨基-戈雷滤波滤(sgolayfilt()函数)
  • Scala 练习一 将Mysql表数据导入HBase
  • 前端工程化:基于Vue.js 3.0的设计与实践
  • Linux☞进程控制
  • mybatis离谱bug乱转类型
  • 视频监控管理平台LntonCVS视频汇聚平台充电桩视频监控应用方案
  • VS环境Python:深度探索与实用指南
  • SpringBoot整合SpringSecurit(二)通过token进行访问
  • 【算法训练 day50 打家劫舍、打家劫舍Ⅱ、打家劫舍Ⅲ】
  • YOLOv8改进 | 卷积模块 | 在主干网络中添加/替换蛇形卷积Dynamic Snake Convolution
  • 深入解析力扣183题:从不订购的客户(LEFT JOIN与子查询方法详解)
  • 牛客NC32 求平方根【简单 二分 Java/Go/C++】