跳转到主要内容
OpenIDEA 通过类型检查语言服务器(默认 basedpyright)提供 Python 代码智能;如果项目配置了 Ruff,还会同时启动 Ruff 服务器。IDE 会自动找到本机的解释器和虚拟环境,用项目解释器运行脚本、pytest 和 Django 测试,并用 debugpy 调试。其他语言的情况见支持矩阵。

语言服务器

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。
  • 不会往你项目的环境里装任何东西。
工具文件夹位于本地数据目录下,见数据目录与日志。

解释器与虚拟环境

项目解释器按以下顺序确定:
  1. 设置 › 语言和框架 › Python 解释器 中选定的解释器。
  2. 项目里的虚拟环境:.venv、venv、env 或 .env(含 pyvenv.cfg 的目录),或 .pixi/envs/ 下的 pixi 环境。
  3. 项目通过 mise 或 asdf 固定的 Python 版本(mise.toml、.tool-versions 等 mise 配置文件)。
该页面的解释器列表还会列出 IDE 在本机找到的解释器:当前激活的 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 子类及其测试方法。
即使项目没有声明任何测试配置,测试文件也可以用 pytest 运行(用项目解释器执行 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 配置运行。