在 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。
请安装下面的扩展,它会自动配置 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_root
或 workspace_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
,您可以在其中指定包含主要内容的文件 - 没有任何文件扩展名。
首先,这是我的工作区结构:
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。
请安装下面的扩展,它会自动配置 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_root
或 workspace_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
,您可以在其中指定包含主要内容的文件 - 没有任何文件扩展名。