问题描述

在运行或调试Python代码的时候,我们可能会遇见下面这种情况,项目结构如下所示:

1
2
3
4
5
6
/path/to/your/project
├── main.py
├── a
│ └── some_script.py
└── b
└── some_module.py

此时我们想运行a文件夹中的some_script.py文件,但他其中包含了一行引入代码如下所示:

1
from b.some_module import *

直接使用传统python ./a/some_script.py运行代码会报错。

解决方案

设置PYTHONPATH参数,其作用是告诉脚本从哪个位置查找模块.

当你运行一个 Python 程序并使用 import 语句导入模块时,Python 会按顺序在以下几个位置查找模块:

  1. 当前脚本所在目录。
  2. 标准库目录。
  3. PYTHONPATH 环境变量中指定的目录。
  4. 安装的第三方包所在的目录(例如,通过 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python Debugger: Current File",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
// "cwd": "${workspaceFolder}",
"env": {
"PYTHONPATH": "${workspaceFolder}"
}
}
]
}
注意

其中的cwd参数作用是设置当前工作目录为工作区根目录,确保代码中所有相对路径都是相对于项目根目录。不要混淆。


本站由 @anonymity 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。