навигация по коду внутри модуля python невозможна в коде Visual Studio - PullRequest
1 голос
/ 30 января 2020

Прежде всего, это моя структура рабочего пространства:

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 прямо к его определению. Я даже не смог запустить или отладить python main в caller_with_main_calls_service.py, потому что он сказал module not found. При установке модуля через пипс работает. Однако во время разработки это нежелательно ...

То, что я пробовал до сих пор:

  • пробовал .env подход и установил PYTHONPATH для моего интерпретатора + ${workspaceRoot}+"/libs/module_name/module_name"

  • установить настройки / настройки рабочего пространства. 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, я экспортировал $PYTHONPATH env var таким же образом, как в 1) для включения пути к библиотеке

Как выглядят файлы python из модуля:

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

Не уверен, если это уместно, но я работаю с WSL.

Ответы [ 3 ]

0 голосов
/ 04 февраля 2020

[Предполагается, что вы используете Python 3]

Навигация не работает, поскольку расширение Python ищет в каталоге рабочей области и в любом месте, указанном в PYTHONPATH. Так что в этом случае ваш импорт не имеет смысла для расширения, потому что нет модуля или пакета с именем module_name в workspace_root или workspace_root/libs. И поскольку вы указали абсолютный импорт, Python ищет только модуль или пакеты с указанным именем, а не ищет место, где вы выполняли импорт.

Я не совсем уверен, какую структуру кода / директории вы используете. после, но либо измените ваш импорт на from . import service_calls_indendent или откройте workspace_root/libs/module_name в качестве рабочей области.

0 голосов
/ 13 февраля 2020

Как прокомментировано, недостаточно указать from . import service_calls_independent aka относительный импорт.

Кроме того, 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, где вы указываете файл с основным внутри - без расширения файла.

0 голосов
/ 30 января 2020

Пожалуйста, установите ниже расширений, он будет автоматически настраивать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...