快速搞定Python绝对/相对导入

很久没有敲代码了,遇到绝对导入和相对导入,一脸懵逼。查阅资料,总算厘清了问题。话不多说,开始我的表演:

一、概念速览

Python的绝对导入和相对导入是管理和组织大型项目中不同模块和包之间依赖关系的重要工具,有助于提高代码的可读性、可维护性和可重用性。导入的关系错综复杂,不花功夫理解和实践,很难掌握、容易出错。

绝对导入:指在导入模块时,提供完整的包或模块的路径名。形式可为import或者from import。

相对导入:指在导入模块时,使用相对于当前模块的路径。使用点.表示当前包,使用点点..表示上级包。只能用from import形式。

模块(module):目录下的.py文件。

包(package):理解成文件夹。

二、准备工作

(在Windows平台的vs code下开展)

创建目录树和模块(.py)

即ALL文件夹下有子文件夹A和B

A下面有A1文件夹,A1文件夹内有模块utilA.py

B下面有B1文件夹以及模块main.py(程序入口),B1文件夹内有模块utilB.py

main.py,utilA.py和utilB.py三个模块的代码如下:

# main.py
from B1 import utilB
print(utilB.blueB())
# utilA.py
def blueA():
    return 100

# utilB.py
def blueB():
    return 0

三、干货

1. main入口不能使用相对导入,只能够使用绝对导入;

例如把main.py改为相对导入:

# main.py
from .B1 import utilB
print(utilB.blueB())

就会报错:ImportError: attempted relative import with no known parent package

2. 绝对导入和相对导入均只适用于main.py入口所在的上一级目录下的其他模块,因此main.py可以导入utilB.py,而不能直接导入utilA.py,否则会报错:ModuleNotFoundError: ...

运行原先的main.py,得到结果0,说明导入utilB.py成功!

3. 如果非要从main.py导入任何不在其上一级目录下的模块(如utilA.py),可以把main.py改成:

# main.py
import sys
sys.path.append(r"C:\Users\wokao\Desktop\ALL\A\A1")
import utilA
print("main_name="+__name__)
print(utilA.blueA())

其中C:\Users\wokao\Desktop\ALL\A\A1为本例utilA.py的地址,应替换成读者放置utilA的实际地址(鼠标指向资源管理器中的utilA.py,然后右键点击鼠标,选择“复制文件地址”,再粘贴到r后面即可)。运行main.py,可以看到输出为100,说明调用utilA.py中的blue()函数成功!

四、ps:

才疏学浅,以上内容若有误,请不吝指出。

站在巨人肩上,我们能够望得更远!

赠人玫瑰,手留余香。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值