首页 > 其他 > 详细

绝对路径和相对路径

时间:2019-09-10 01:03:57      阅读:68      评论:0      收藏:0      [点我收藏+]

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

绝对导入:以glance作为起始。

优点:比较直观

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

优点:可以随意移动包,只要能找到包的位置,就可以使用包里面的模块。

缺点:不能在包里面使用模块了。比如在policy模块中就不能调用外面的模块。

例如:我们在glance/api/version.py中想要导入glance/cmd/manage.py

技术分享图片
在glance/api/version.py

#绝对导入
from glance.cmd import manage
manage.main()

#相对导入
from ..cmd import manage
manage.main()
View Code

 

注意:

我们可以用import导入内置或者第三方模块(已经在sys.path中),但是要绝对避免使用import来导入自定义包的子模块(没有在sys.path中),应该使用from... import ...的绝对或者相对导入,且包的相对导入只能用from的形式。

比如我们想在glance/api/versions.py中导入glance/api/policy.py,有的同学一抽这俩模块是在同一个目录下,十分开心的就去做了,它直接这么做

技术分享图片
 #在version.py中
 import policy
 policy.get()
View Code

没错,我们单独运行version.py是一点问题没有的,运行version.py的路径搜索就是从当前路径开始的,于是在导入policy时能在当前目录下找到

我们知道,我的子包中的模块version.py极有可能是被一个glance包同一级别的其他文件导入,比如我们在于glance同级下的一个test.py文件中导入version.py,如下

from glance.api import versions
‘‘‘
执行结果:
ImportError: No module named ‘policy‘
‘‘‘
‘‘‘
分析:
此时我们导入versions在versions.py中执行
import policy需要找从sys.path也就是从当前目录找policy.py,
这必然是找不到的
‘‘‘

 

 

 

 

 

绝对路径和相对路径

原文:https://www.cnblogs.com/zly9527/p/11494768.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!