Python相对导入问题

当你的代码中有相对导入时,很容易出现以下错误信息:

Attempted relative import in non-package

这是由于你直接执行了包内的脚本。解决方法是在包外import此脚本


我们看一个例子,我有如下文件结构:

Test/
├── package1
│   ├── __init__.py
│   ├── script1.py
│   └── script2.py
└── test.py

脚本内容如下:

script1.py

value = 1


script2.py

from .script1 import value


def func():
    print(value)

if __name__ == '__main__':
    func()

脚本2使用了相对导入。我的目的是测试func()函数。当我直接执行script2.py这个脚本时,会执行失败,是由于当你直接执行script2.py时,.并没有被解释为当前包package1,而被解释为__main__。为了解决此问题,你可以在package1外面的test.py脚本中书写如下代码:

from package1 import script2

script2.func()

这样,就可以看到func()函数的输出了。


另一种方式是直接以模块的方式执行包内的某个脚本,即:

python -m package1.script2

总之,一句话:当你的package里有相对import代码时,不要直接执行此package内的脚本,请在此package外import后执行,或者使用-m参数




Ref

https://stackoverflow.com/questions/14664313/attempted-relative-import-in-non-package-although-packages-with-init-py-in

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值