vscode/pylance 自动导入错误的根路径

Ant*_* M. 5 python visual-studio-code vscode-python pylance

假设我有一个具有以下文件结构的项目:

\n
project_dir\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package1\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 module1.py\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 package2\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 module2.py\n
Run Code Online (Sandbox Code Playgroud)\n

当我想在其他模块中使用 module1 中的某个类时,我输入类似的内容

\n
class SomeNewClass(ClassFromModule1):  # here I press ctrl-space to make auto-import\n    ...\n
Run Code Online (Sandbox Code Playgroud)\n

当 Pylance 进行自动导入时,它总是从项目的根目录开始,所以我得到了这个自动导入:

\n
from src.package1.module1 import ClassFromModule1\n
Run Code Online (Sandbox Code Playgroud)\n

问题是我的工作目录是src并且我想得到

\n
from package1.module1 import ClassFromModule1\n
Run Code Online (Sandbox Code Playgroud)\n

有没有办法修复自动导入 Pylance 功能的根路径?

\n

Jia*_*eDu 3

默认情况下,如果您在 中导入模块src,它应该如下所示(与您想要的效果相同)。

\n

在此输入图像描述

\n

在此输入图像描述

\n

所以请检查vscode中以下设置是否被修改:打开设置并搜索Analysis: Auto Search Paths

\n

在此输入图像描述

\n

默认情况下启用(选中)此项。如果修改为关闭,请重新打开。

\n

这里有些例子:

\n

文件夹结构:

\n
Project_dir\n\xe2\x94\x9c\xe2\x94\x80 folderone\n\xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80 package3\n\xe2\x94\x82     \xe2\x94\x94\xe2\x94\x80 moudle3.py  # --class C\n\xe2\x94\x9c\xe2\x94\x80 src\n\xe2\x94\x82  \xe2\x94\x9c\xe2\x94\x80 package1\n\xe2\x94\x82  \xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80 moudle1.py  # --class A\n\xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80 package2\n\xe2\x94\x82     \xe2\x94\x94\xe2\x94\x80 moudle2.py  # --class B\n\xe2\x94\x94\xe2\x94\x80 Test.py\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • 如果导入src文件夹中的模块(默认启用上述设置):

    \n
    # import code will not include `src` (like the picture shown above)\nfrom package1.moudle1 import A\n
    Run Code Online (Sandbox Code Playgroud)\n
  • \n
  • 如果关闭上述功能,则导入代码如下:

    \n

    在此输入图像描述

    \n
  • \n
  • 如果导入其他文件夹下的模块:导入代码将从当前工作空间下的一级文件夹开始。

    \n

    在此输入图像描述

    \n

    在此输入图像描述

    \n
  • \n
\n

注意: vscode 使用当前打开的文件夹作为工作空间。所以你打开哪一级文件夹也会影响导入部分的代码。

\n

上面的例子是在vscode中打开该Project_dir文件夹作为工作区。

\n

如果我放入Project_dir一个新文件夹ImpDemoImpDemo在 vscode 中打开该文件夹。那么导入部分的代码是这样的:

\n

在此输入图像描述

\n

在此输入图像描述

\n

  • 我的示例不是很精确,实际上我的工作目录类似于“myproject”,因此自动搜索路径不起作用。但我发现了另一个设置**python.analysis.extraPaths**。将“myproject”添加到该设置中对我很有帮助。无论如何,感谢您正确的挖掘方向! (4认同)