在 visual studio 代码中无法在 python 模块内进行代码导航

code navigation within python module not possible in visual studio code

首先,这是我的工作区结构:

workspace_root
├── ...
├── libs
│   └── module_name
│       ├── README.md
│       ├── module_name
│       │   ├── __init__.py
│       │   ├── caller_with_main_calls_service.py
│       │   ├── independent.py
│       │   └── service_calls_indendent.py
│       └── setup.py
├── ...

我的问题?

在 VSCode 中,我无法在模块的元素定义中导航。 这包括从 import 语句直接跳到它的定义。 我什至无法在 caller_with_main_calls_service.py 中启动或调试 python main,因为它显示 module not found。 通过 pip 安装模块时,它可以工作。 然而,这在开发过程中是不希望的...

到目前为止我尝试了什么:

{
   "python.linting.pylintEnabled": true,
   "python.linting.enabled": true,
   "python.pythonPath": "/path/to/conda_env/python",
   "python.autoComplete.extraPaths": [
       "${workspaceRoot}/libs/module_name/module_name"
   ],
   "editor.formatOnSave": true
}

模块中的 python 文件是什么样的:

# example: caller_with_main_calls_service.py
from module_name import service_calls_indendent as sci

不确定是否相关,但我正在使用 WSL。

请安装下面的扩展,它会自动配置 vscode,您可以轻松找到定义、源代码,它还会建议优化的编码方式

https://marketplace.visualstudio.com/items?itemName=njpwerner.autodocstring

https://marketplace.visualstudio.com/items?itemName=trixnz.go-to-method

https://marketplace.visualstudio.com/items?itemName=ms-python.python

[假设您使用的是 Python 3]

导航不工作,因为 Python 扩展正在您的工作区目录和 PYTHONPATH 中指定的任何地方查找。因此,在这种情况下,您的导入对扩展没有意义,因为在 workspace_rootworkspace_root/libs 下没有名为 module_name 的模块或包。并且因为您指定了绝对导入 Python 仅查找具有指定名称的模块或包,而不是在您进行导入的位置旁边查找。

我不太确定你想要什么 code/directory 结构,但要么将你的导入更改为 from . import service_calls_indendent,要么打开 workspace_root/libs/module_name 作为你的工作区。

如评论所述,仅放置 from . import service_calls_independent 又名相对导入是不够的。

此外,launch.json需要调整:

    {
      "name": "Python: Module Runner",
      "type": "python",
      "request": "launch",
      "module": "libs.module_name.caller_with_main_calls_service",
      "args": [
            1,
            2,
            3
      ],
      "env": {
        "FOO": "BAR"
      }
    }

重要的部分是 module,您可以在其中指定包含主要内容的文件 - 没有任何文件扩展名。