python 相对导入包或模块

        之前对包或模块的导入非常迷糊,特别是相对导入。下面贴出网上找的的两篇还不错的文章进行分享:

一、包的相对和绝对导入

        我们的最顶级包base是写给别人用的,然后在base包内部也会有彼此之间互相导入的需求,这时候就有绝对导入和相对导入两种方式:

绝对导入:以base作为起始

相对导入:用 . 或者 .. 的方式最为起始(只能在一个包中使用,不能用于不同目录内

1. 绝对导入

在demo01中的demo01_test02.py中调用demo02中的模块

from base.demo01 import demo01_test01
demo01_test01.say()    

在 base目录下的py文件中调用demo01_test02.py

from base.demo01 import demo01_test02
demo01_test02.demo01_test01.say()

2.相对导入

在demo01中的demo01_test02.py中调用demo02中的模块

from ..demo02.demo02_test01 import say21
say21()

在 base目录下的py文件中调用demo01_test02.py 

from base.demo01 import demo01_test02
 
demo01_test02.say21()
import sys
print(sys.path)
'''
啦啦啦
呜呜呜
demo02_test01_hello
demo02_test01_hello
['D:\\pycharm工作空间\\day12\\base', 'D:\\pycharm工作空间\\day12', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\DLLs', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\win32', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\win32\\lib', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\Pythonwin', 'C:\\Program Files\\JetBrains\\PyCharm 2018.3.2\\helpers\\pycharm_matplotlib_backend']
'''

相对路径运行注意事项:

        在没有明确指定包结构的情况下,Python 是根据 __name__ 来决定一个模块在包中的结构的,如果是 __main__ 则它本身是顶层模块,没有包结构,如果是base.demo01.demo02 结构,那么顶层模块是 base。

        如果是相对导入,一个模块必须有包结构且只能导入它的顶层模块内部的模块

        如果一个模块被直接运行,则它自己为顶层模块,不存在层次结构,所以找不到其他的相对路径。

 

 

 

参考文章:

python包相关知识点之包的导入、相对路径以及绝对路径-语言吧

python学习:包导入教程_python导包_Python热爱者的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值