语言服务器
Python 文件(.py、.pyi、.pyw、SConstruct、SConscript,以及 shebang 中含 python 的文件)同一时间只由一个类型检查器提供服务,Ruff 另外并行:
basedpyright 以
standard 类型检查模式启动,而不是它自带的更严格的默认模式。项目里的 pyproject.toml 中的 [tool.basedpyright] 或 pyrightconfig.json 仍然优先。
Ruff 只为位于 Ruff 配置之下的文件启动:ruff.toml、.ruff.toml,或包含 [tool.ruff] 表的 pyproject.toml。basedpyright 本身不提供格式化,格式化由 Ruff 负责。
想手动指定类型检查器,打开 设置 › 语言和框架 › 语言服务器,选中这四个服务器中的任意一个,修改 Python 语言服务器。自动 会按上表顺序使用第一个已安装的服务器;也可以固定选一个,或选 无。
环境配置
安装语言服务器
打开 Python 文件时如果缺少服务器,OpenIDEA 会弹出类似 basedpyright 未安装 的通知,点 安装 即可。也可以在 设置 › 语言和框架 › 语言服务器 中安装、重新安装,或者指定你自己的可执行文件。- basedpyright、ty、Pyrefly 和 Ruff 会装进 IDE 工具文件夹里的独立虚拟环境。
PATH上有 uv 时用 uv,否则用python3 -m venv。前提是本机装有 Python 3 或 uv。 - Pyright 通过 npm 安装,需要 Node.js。
- 不会往你项目的环境里装任何东西。
解释器与虚拟环境
项目解释器按以下顺序确定:- 设置 › 语言和框架 › Python 解释器 中选定的解释器。
- 项目里的虚拟环境:
.venv、venv、env或.env(含pyvenv.cfg的目录),或.pixi/envs/下的 pixi 环境。 - 项目通过 mise 或 asdf 固定的 Python 版本(
mise.toml、.tool-versions等 mise 配置文件)。
VIRTUAL_ENV,virtualenvwrapper、pipenv 和 Poetry 创建的虚拟环境,pyenv 的各个版本,uv 安装的 Python,mise 和 asdf 的安装,conda 环境(Miniconda、Anaconda、Miniforge、Mambaforge、micromamba,以及 conda env list 能看到的所有环境),还有 PATH 上的 python 可执行文件。
选定的解释器会传给 basedpyright 和 Pyright(python.pythonPath),其虚拟环境会作为 VIRTUAL_ENV 提供给语言服务器和运行配置。
状态栏上的 Python 解释器 显示当前解释器,点击可以切换,也可以打开 添加新的解释器… 和 解释器设置…。
创建环境
在 设置 › 语言和框架 › Python 解释器 中选择 添加 Python 解释器,再选 解释器类型:- Virtualenv 环境:用你选的基础解释器执行
python -m venv。 - uv 环境:执行
uv venv <location> --python <base>(PATH上需要有 uv)。 - Poetry 环境:在项目中执行
poetry env use <base>。 - Conda 环境:执行
conda create -p <location>,Python 版本与基础解释器一致。
软件包
同一页面会列出所选解释器已安装的软件包,可以搜索、按名称 安装、升级 和 卸载。IDE 使用解释器自带的 pip;没有 pip 的环境(uv 创建的环境默认如此)改用uv pip。
页面上的其他选项:
- 激活 virtualenv(终端 分组):新的终端会话会运行虚拟环境的激活脚本。
- 文档字符串格式(文档字符串 分组):纯文本、reStructuredText、Epytext、NumPy 或 Google。文档字符串里的标签和关键字按该格式高亮。
格式化
重新格式化代码(⌘⌥L / Ctrl+Alt+L)使用 Ruff。在 设置 › 语言和框架 › Ruff 中可以设置 Ruff 路径、配置目录、格式化工具(自动(优先语言服务器) 或 Ruff)以及 保存时运行。不指定配置目录时,Ruff 读取最近的 pyproject.toml([tool.ruff])、ruff.toml 或 .ruff.toml。
运行与测试
在包含pyproject.toml、setup.py、setup.cfg、requirements.txt、pytest.ini、tox.ini、manage.py 或项目虚拟环境的目录里,OpenIDEA 会自动识别这些运行配置:
工具会通过项目的包管理器运行:有
uv.lock 时用 uv run,有 poetry.lock 时用 poetry run,有 pdm.lock 时用 pdm run,否则用 .venv 或 venv 中的工具,pixi 环境则用 pixi run。如果在设置中选了解释器,运行配置会直接使用它。
编辑器左侧栏的图标可以运行或调试:
- 文件中的
if __name__ == "__main__":代码块; - pytest 的
test_*函数和Test*类; unittest.TestCase子类及其测试方法。
python -m pytest,因此该解释器里要装有 pytest)。在 Django 项目中,TestCase 测试也可以用 manage.py test 运行。pytest 和 Django unittest 运行器的结果显示在测试树中,重新运行失败的测试 只重跑失败的用例。
也可以在 运行 › 编辑配置… 中新建 pytest 和 Django 测试 配置。详见运行配置和测试。
使用覆盖率运行 使用项目解释器中的 coverage.py,性能分析 使用 py-spy。缺少时 IDE 会提示,并给出安装命令(例如 uv 项目中的
uv add --dev coverage)。详见覆盖率和性能分析。
Jupyter Notebook(.ipynb)在 Python 解释器上运行,见 Notebook。
调试
Python 调试使用 debugpy。开始调试时如果缺少 debugpy,OpenIDEA 会提示安装。IDE 在自己的工具文件夹里保存一份 debugpy,并把它加载到运行程序的解释器中,所以项目环境里不需要安装 debugpy。- 可以调试脚本、
python -m模块,以及pytest、uvicorn这类命令行入口。通过uv run、poetry run、pdm run、pipenv run、hatch run或rye run启动的程序会在对应管理器的环境中运行。 - 调试
manage.py时会开启 debugpy 的 Django 支持。 - 附加到进程…(
⌥⇧F5/Ctrl+Alt+F5)会在 Python (debugpy) 分组下列出本机的 Python 进程。 - Python 远程调试 (debugpy) 配置可以附加到用
python -m debugpy --listen启动的进程,本机或远程机器都可以,并支持本地与远程根目录映射。
- 设置 › 构建、执行、部署 › Python 调试器:调试时自动附加到子进程 和 兼容 Gevent。
- 设置 › 构建、执行、部署 › 调试器 › 单步执行:不要步入库脚本(即 debugpy 的
justMyCode)。
框架支持
目前只有 Django 有专门支持:manage.py runserver 和 manage.py test 运行配置、Django 测试 配置类型(目标、settings 模块、选项)、在左侧栏运行单个 TestCase 测试,以及调试器的 Django 模式。Flask、FastAPI 等其他框架按普通脚本或命令行入口运行。
限制
- 同一时间只运行一个类型检查器。Ruff 只在有 Ruff 配置的项目中运行。
- 代码智能和诊断都来自语言服务器,IDE 自身不做 Python 分析。
- 覆盖率和性能分析需要你的环境中装有 coverage.py 和 py-spy,IDE 不自带这两个工具。
- 左侧栏的运行图标基于逐行扫描,不常见的测试写法可能没有图标,但仍可以通过 pytest 配置运行。