我正在尝试从PyCharm切换到VS Code以编写python代码。但是我在通过代码导航(特别是Go to definition
)时遇到了问题。
我的项目结构是这样的:
- my_pkg
setup.py
README.md
- my_pkg
- celery
tasks.py
- foo
main.py
在my_pkg/my_pkg/celery/tasks.py
中,我需要func_bar
中的my_pkg/my_pkg/foo/main.py
。所以我这样导入:
from my_pkg.foo.main import func_bar
Go to definition
在PyCharm中工作正常。
我也像这样在本地安装my_pkg
:cd ~/my_pkg; pip install -e .
但是在VSCode中,如果我使用此^^导入,则无法进入定义,相反,我必须以以下方式之一进行操作:
from my_pkg.my_pkg.foo.main import func_bar
或
from ..my_pkg.foo.main import func_bar
问题:在这种情况下,Go to definition
有效,但是我的代码不再有效。
例如在ipython中:
from my_pkg.my_pkg.foo.main import func_bar
引发ModuleNotFoundError: No module named 'my_pkg.mypkg'
我在具有python 3.6.4的macOS上使用VS Code Version 1.26.1 (1.26.1)
。
我的工作空间设置:
{
"python.pythonPath": "${workspaceRoot}/virtual/bin/python",
"python.venvPath": "${workspaceRoot}/virtual",
"python.autoComplete.extraPaths": [
"${workspaceRoot}/virtual/lib/python3.6/site-packages"
],
"python.unitTest.pyTestEnabled": true
}
对于通过pip外部安装的软件包,它工作正常。
答案 0 :(得分:0)
我发现了问题:
我在根__init__.py
和my_pkg
目录中都有my_pkg/my_pkg
。因此,VS Code选择根my_pkg
作为引用对象。
因此,要解决此问题,我只需要删除my_pkg/__init__.py
。