繁体   English   中英

在 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 安装模块时,它可以工作。 然而,这在开发过程中是不希望的......

到目前为止我尝试过的:

  • 尝试.env方法并将PYTHONPATH设置为我的解释器 + ${workspaceRoot}+"/libs/module_name/module_name"

  • 像这样设置工作区设置/settings.json:

{
   "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
}
  • 在启动 VSCode 之前,我以与 1) 中相同的方式导出了$PYTHONPATH env var 以包含 lib 路径

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

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

不确定,如果这相关,但我正在与 WSL 合作。

[这假设您使用的是 Python 3]

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

我不太确定您要的是什么代码/目录结构,但是要么将导入更改为from . import service_calls_indendent from . import service_calls_indendent或打开workspace_root/libs/module_name作为您的工作区。

请安装下面的扩展,它会自动配置 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

正如评论的那样, from . import service_calls_independent 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 ,您可以在其中指定带有 main 内部的文件 - 没有任何文件扩展名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM