问题描述
在运行或调试Python代码的时候,我们可能会遇见下面这种情况,项目结构如下所示:
1 | /path/to/your/project |
此时我们想运行a文件夹中的some_script.py
文件,但他其中包含了一行引入代码如下所示:
1 | from b.some_module import * |
直接使用传统python ./a/some_script.py
运行代码会报错。
解决方案
设置PYTHONPATH
参数,其作用是告诉脚本从哪个位置查找模块.
当你运行一个 Python 程序并使用 import 语句导入模块时,Python 会按顺序在以下几个位置查找模块:
- 当前脚本所在目录。
- 标准库目录。
PYTHONPATH
环境变量中指定的目录。- 安装的第三方包所在的目录(例如,通过
pip
安装的包)。
运行
在命令行中设置PYTHONPATH
,然后运行a
文件夹中的代码。例如,如果你要运行a
文件夹中的some_script.py
,可以这样做:
1 | PYTHONPATH=$(pwd) python a/some_script.py |
如果命令行正好处在当前项目文件夹下,直接写成如下形式,即可确保相关包能够被正确导入。
1 | PYTHONPATH=./ python a/some_script.py |
调试
在vscode左侧初始化一个调试launch.json
文件后,添加env
参数,按照如下设置即可:
1 | { |
注意
其中的cwd参数作用是设置当前工作目录为工作区根目录,确保代码中所有相对路径都是相对于项目根目录。不要混淆。