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

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 b
    b_method()          # 对应: from pkg2.b import b_method
    

main.py 文件源码: 
# import pkg1.a
# from pkg1 import a
from pkg1.a import a_method

if __name__ == "__main__":
    # pkg1.a.a_method() # 对应: import pkg1.a
    # a.a_method()        # 对应: from pkg1 import a
    a_method()          # 对应: from pkg1.a import a_metho
    
2. 同一个包的不同模块之间的导入问题
# 2. 同一个package内部不同模块之间的导入
# 下面是项目的目录结构:
WorkDirectory/			# 项目根目录 (也是python命令运行的工作目录)
│  main.py				# 
│
└─module1
        a.py
        b.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_method

if __name__ == "__main__":
    # module1.a.a_method()  # 对应: import module1.a
    a_method()  # 对应: from module1.a import a_method

相关推荐

  1. Python模块

    2024-06-09 09:34:03       48 阅读
  2. python模块

    2024-06-09 09:34:03       25 阅读
  3. python 模块

    2024-06-09 09:34:03       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-09 09:34:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-09 09:34:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-09 09:34:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-09 09:34:03       20 阅读

热门阅读

  1. C# WPF入门学习主线篇(十一)—— 布局管理

    2024-06-09 09:34:03       11 阅读
  2. scss是什么安装使⽤的步骤

    2024-06-09 09:34:03       10 阅读
  3. openresty安装并使用lua进行业务逻辑处理

    2024-06-09 09:34:03       8 阅读
  4. C语言学习笔记 库文件

    2024-06-09 09:34:03       9 阅读
  5. 使用uniapp的canvas制作签名组件

    2024-06-09 09:34:03       11 阅读
  6. linux cron 执行url

    2024-06-09 09:34:03       7 阅读
  7. Linux Swap Cache

    2024-06-09 09:34:03       8 阅读
  8. QUAST安装及使用(Bioinformatics工具-022)

    2024-06-09 09:34:03       8 阅读
  9. c++【入门】求梯形的面积

    2024-06-09 09:34:03       11 阅读