首页 > 解决方案 > 来自父兄弟的 Pyright 导入导致缺少导入

问题描述

我正在尝试运行一个 django 应用程序,这是以下结构(最小复制):

root/
  business/
    __init__.py
    urls.py
  monitoring/
    __init__.py
    api.py
  manage.py

urls.py我有以下导入:from monitoring.api import MonitoringConfigurationAPIView. 但是,这会导致 Pyright 错误[Pyright reportMissingImports] [E] Import "monitoring.api" could not be resolved

添加说明符以查看父目录 ( from ..monitoring.api ...) 会使 Pyright 静音,但会导致 Python 本身出错:

File "/home/user/Projects/root/business/urls.py", line 20, in <module>
    from ..monitoring.api import MonitoringConfigurationAPIView
ImportError: attempted relative import beyond top-level package

我尝试__init__.py在根目录中添加一个空白,但这没有帮助。pyrightconfig.json我尝试在根目录( )中创建一个文件root/pyrightconfig.json并设置根目录,但这也不起作用。

{
    "executionEnvironments": [
        {
          "root": "."
        }
    ]
}

它可以处理的所有外部包都很好,没有问题。只有本地是一个问题。我错过了什么吗?

标签: pythonpyright

解决方案


找到指出我的问题的链接。pyrightconfig.json必须位于 repo 根目录,而不是项目根目录。

刚刚解决了我的问题。似乎 coc 扩展将您的 git repo 的根目录识别为根目录,而不是您打开的目录。我使用 monorepo 的子目录作为我的根目录,并用 neovim 自己打开它。我只是将 pyrightconfig.json 移动到正确的根目录,并将我的子目录的前缀添加到执行环境中的根路径,它就可以工作了。

https://github.com/fannheyward/coc-pyright/issues/235#issuecomment-756288634

我的回购在技术上是

repo/
  namespace/
    namespace/
      django root/
        business/
        ...

我不认为这很重要。我的错。


推荐阅读