相对导入和绝对导入2

再做一个测试,新建一个 m.py

.
├── m5.py
├── main.py
├── package1
├── package2
│   ├── __pycache__
│   │   └── m1.cpython-38.pyc
│   ├── m1.py
│   └── package4
│       ├── __pycache__
│       │   ├── m2.cpython-38.pyc
│       │   └── m3.cpython-38.pyc
│       ├── m2.py
│       └── m3.py
└── package3

现在,我们尝试重写m2的代码用相对导入的方法去调用m5.py里的变量

main.py

from package2.package4.m2 import m

print(m)

m5.py

print("----------这是m5.py的代码 start----------")
m=5
print(__package__)
print("----------这是m5.py的代码 end----------")

发现报错了

ValueError: attempted relative import beyond top-level package

相对引入不能超过顶级包, 因为m2的顶级包是package2,而m5和入口文件在同一层下,那么如何解决呢?

建议把 m5.py 丢到 package2 下

相对路径的原理,换句话说为什么python可以找到模块

靠的是__name__,如果是入口文件,是没有package的,会被转化为 __main__,所以与可执行文件同级,用相对路径就找不着了

可能你会发现linting很烦,会误报,那么怎么关闭呢

cmd + , 打开偏好设置, 然后搜索 python.linting.enabled, 去掉勾选

results matching ""

    No results matching ""