You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让pylsp识别本地项目子目录中的Python导入?

解决Neovim+pylsp导入识别问题(Python代码在子目录)

问题场景

项目结构如下:

.
├── .git
├── src
│   ├── python
│   │   ├── foo.py
│   │   ├── app
│   │   │   └── core.py
│   └── lang2
│       ├── bar.lang2
│       └── settings.py
├── system
├── tests
│   └── run.py
└── util
    ├── examples
    │   └── example.py
    └── run.py

启动搭载pylsp的Neovim时,LSP根目录被设为包含.git的顶层目录,但Python代码实际在src/python子目录,导致以下导入无法识别(跳转定义提示“未找到位置”):

import foo
from app import core
from app.core import Thing

尝试过PYTHONPATH=src/python/ nvim启动编辑器,无明显效果。

通用解决方案

方案1:添加pyproject.toml(推荐,适配现代Python生态)

在项目顶层目录创建pyproject.toml,直接给pylsp指定源码路径:

[tool.pylsp]
extraPaths = ["src/python"]

如果需要同时适配mypy、pytest等工具,可以补充项目基础配置:

[project]
name = "your-project-name"
version = "0.1.0"
packages = [{ include = "*", from = "src/python" }]

[tool.pylsp]
extraPaths = ["src/python"]

pylsp会自动读取这个文件的配置,把src/python加入模块搜索路径。

方案2:直接配置Neovim的pylsp设置

在Neovim的LSP配置文件(比如init.lua或专门的pylsp配置文件)中,手动给pylsp添加额外路径:

require('lspconfig').pylsp.setup{
  settings = {
    pylsp = {
      extraPaths = {"src/python"},
      -- 可选:优先读取pyproject.toml的配置
      configurationSources = {"pyproject.toml"}
    }
  }
}

这种方式直接作用于pylsp,不受环境变量影响,稳定性更高。

方案3:项目级环境变量(适配多工具场景)

在项目根目录创建.env文件,写入环境变量配置:

PYTHONPATH=./src/python:$PYTHONPATH

然后安装vim-dotenv插件,让Neovim启动时自动加载项目根目录的.env文件,pylsp会继承这个环境变量的路径配置。

补充说明

直接用PYTHONPATH=src/python/ nvim启动无效的原因,通常是Neovim启动时没有正确继承临时环境变量,或者pylsp的内部路径优先级覆盖了系统环境变量。上面的方案都是直接针对pylsp的配置逻辑,更可靠。

内容的提问来源于stack exchange,提问作者Moberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:44:58