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
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值