python小知识

130 阅读1分钟

1. 系统路径问题

问题表现

想要调试某个脚本的时候经常遇到这个报错

attempted relative import with no known parent package

原因

脚本(script)不能用相对引用(from ..xxx import yyy),模块(module)可以

现有文件目录:

a
└─ b.py

分别执行: cd a&&python b.pypython 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,但只能通过运行按钮执行。