1. 系统路径问题
问题表现
想要调试某个脚本的时候经常遇到这个报错
attempted relative import with no known parent package
原因
脚本(script)不能用相对引用(from ..xxx import yyy),模块(module)可以
现有文件目录:
a
└─ b.py
分别执行:
cd a&&python b.py和python a/b.py,两种执行方式,对于文件b的sys.path是一样的,都是 os.path.dirname("b.py")
如何区分脚本和模块
脚本:python xx.py
模块:被调用的。
解决方法
(这个未测试)执行脚本的时候,最好不要引入包非同级包,相对引用可以在其他地方用
引申
同样的代码,在pycharm里可以运行,在vscode里会报错,因为有些IDE(例如pycharm)会在点击运行按钮时帮你添加系统路径。
同样用上文的文件目录
a
└─ b.py
点击vscode的运行按钮,对于b.py,系统路径仅仅包含[{Project_Dir}/a,...]
点击pycharm的运行按钮,对于b.py,系统路径会包含[{Project_Dir}, {Project}/a, ...]
所以在pycharm中,脚本文件可以放在任意层级中,并且可以从Project_Dir层级开始import,但只能通过运行按钮执行。