python3 modulenotfounderror_python – 相对导入 – ModuleNotFoundError:没...

TL; DR:您不能从您执行的文件中执行相对导入,因为__main__模块不是包的一部分.

绝对导入 – 导入sys.path上可用的内容

相对导入 – 相对于当前模块导入某些内容,必须是包的一部分

如果您以完全相同的方式运行两个变体,其中一个应该可以工作.无论如何,这里有一个例子可以帮助你理解发生了什么,让我们添加另一个main.py文件,其整体目录结构如下:

.

./main.py

./ryan/__init__.py

./ryan/config.py

./ryan/test.py

让我们更新test.py来看看发生了什么:

# config.py

debug = True

# test.py

print(__name__)

try:

# Trying to find module in the parent package

from . import config

print(config.debug)

del config

except ImportError:

print('Relative import failed')

try:

# Trying to find module on sys.path

import config

print(config.debug)

except ModuleNotFoundError:

print('Absolute import failed')

# main.py

import ryan.test

我们先运行test.py:

$python ryan/test.py

__main__

Relative import failed

True

这里的“test”是__main__模块,并且不知道属于某个包的任何信息.但是导入配置应该可以工作,因为ryan文件夹将被添加到sys.path中.

让我们运行main.py:

$python main.py

ryan.test

True

Absolute import failed

这里测试是在“ryan”包中,可以执行相对导入.导入配置失败,因为Python 3中不允许隐式相对导入.

希望这有帮助.

P.S.:如果您坚持使用Python 3,则__init__.py文件中不再需要它.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值