美文网首页程序员
python3 import机制梳理

python3 import机制梳理

作者: FF_b0bf | 来源:发表于2020-05-25 18:12 被阅读0次

    秉承复习自己,共享他人的原则,简单梳理下python3 import机制

    首先查找器的几大顺序
    1.内置
    2.freeze 模块(见链接 https://wiki.python.org/moin/Freeze)
    3.当前执行目录
    4.第三方库

    import 导入方式
    1.绝对导入(用A代替)
    2.相对导入(用B代替)

    举个例子,如下目录结构

    package
    ├── __init__.py
    ├── main.py
    ├── moduleA.py
    ├── subpackage1
    │   ├── __init__.py
    │   ├── moduleX.py
    │   └── moduleY.py
    └── subpackage2
        ├── __init__.py
        └── moduleZ.py
    

    moduleX.py 要导入 moduleY.py

    # A:
    from package.subpackage1 import moduleY
    # B:
    from . import moduleY
    

    moduleX.py 要导入 moduleZ.py

    # A:
    from package.subpackage2 import moduleZ
    # B:
    from ..subpackage2 import moduleZ.py
    

    从导入来看好处与坏处

    A 好处/坏处,调整项目时容易发现import路径的错误/调整项目结构的时候,import路径需要经常修改
    B 好处/坏处,调整项目结构的时候,有相对位置,不需要经常调整/调整项目不宜发现导入的错误,由于相对路径的关系

    踩坑提醒

    引入相对路径的坑注意
    由于查找器的机制,除了内置库,当前目录则是查找器的首选
    若在main.py文件中有如下导入

    import subpackage1.moduleX
    

    在moduleX.py中又有如下相对引入

    from ..subpackage2 import moduleZ 
    

    执行python main.py 的时候就会告诉你超了package的top-level
    因为在当前sys.path目录下是看不到上层的package,且sys.path[0]是当前执行目录,除非人为把package置为sys.path首位,不然就会出超top-level的错误

    相关文章

      网友评论

        本文标题:python3 import机制梳理

        本文链接:https://www.haomeiwen.com/subject/ndquahtx.html