python3相对路径导入代码_10.3 使用相对路径名导入包中子模块

问题

将代码组织成包,想用import语句从另一个包名没有硬编码过的包的中导入子模块。

解决方案

使用包的相对导入,使一个的模块导入同一个包的另一个模块 举个例子,假设在你的文件系统上有mypackage包,组织如下:

mypackage/

__init__.py

A/

__init__.py

spam.py

grok.py

B/

__init__.py

bar.py

如果模块mypackage.A.spam要导入同目录下的模块grok,它应该包括的import语句如下:

# mypackage/A/spam.py

from . import grok

如果模块mypackage.A.spam要导入不同目录下的模块B.bar,它应该使用的import语句如下:

# mypackage/A/spam.py

from ..B import bar

两个import语句都没包含顶层包名,而是使用了spam.py的相对路径。

讨论

在包内,既可以使用相对路径也可以使用绝对路径来导入。 举个例子:

# mypackage/A/spam.py

from mypackage.A import grok # OK

from . import grok # OK

import grok # Error (not found)

像mypackage.A这样使用绝对路径名的不利之处是这将顶层包名硬编码到你的源码中。如果你想重新组织它,你的代码将更脆,很难工作。 举个例子࿰

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值