相对导入和绝对导入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
, 去掉勾选