Пайрайт с несколькими венвами (монорепо)

Возникла проблема с Pyright в монорепозитории: он не распознавал классы/функции, импортированные из близлежащих проектов/библиотек (поставьте reportMissingImports).

Например, с этой структурой репо:

.
├── library
|   └── src
|       └── __init__.py
├── project1
|   └── src
|       └── main.py
├── project2 ...
└── pyproject.toml

Эта строка в main.py вызовет ошибку reportMissingImports (даже если код работает):

from library import ModuleClass

В качестве обходного пути вручную эта команда работает с корневого уровня:

poetry run pyright --pythonpath project1/.venv/bin/python project1/main.py

Но поскольку у меня есть несколько проектов, каждый со своей папкой .venv, я не могу установить pythonpath глобально.

Я попробовал несколько вариантов в pyproject.toml, чтобы правильно настроить пирайт для всего репозитория, но пока ничего не помогло. Как правильно настроить несколько venv с помощью Pyright?

К вашему сведению, моя конечная цель — настроить Pyright для Sublime Text 3 с помощью LSP-pyright и Python >=3.11. Но по крайней мере до этого командная строка должна работать (-‿-")

Я предполагаю, что вы используете это. В нижней части файла readme написано: если вы хотите перезаписать виртуальную среду, файлpyrightconfig.json должен присутствовать в корне вашего проекта. Вы пробовали это делать и открыли проект на должном уровне?

dkasa 19.04.2024 16:12

Привет ! Да, pyrightconfig.json находится на корневом уровне, и я запускаю его оттуда. Но проблема в событии в командной строке pyright, поэтому... Я внес некоторые улучшения, установив extraPaths. Я обновлю свой вопрос своим конфигурационным файлом

Romain 22.04.2024 15:25

Хороший улов!, ситуация значительно улучшилась, когда я снова открыл папку проекта с помощью Sublime, а не добавляя в проект каждую папку подкаталога. По-прежнему существует проблема с командной строкой pyright, касающаяся внешних библиотек (зависимость в проекте 1, которой нет в других папках).

Romain 22.04.2024 15:32

И, кстати, LSP-pyright, похоже, не обрабатывает конфигурацию pyproject.toml.

Romain 22.04.2024 15:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
342
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Здесь несколько вещей:

  • Проект Sublime text должен быть нацелен на корневой каталог. Раньше я открывал свой проект, добавляя каждый подкаталог, но на самом деле это плохая идея;
  • LSP-pyright, похоже, также читает конфигурацию pyproject.toml на корневом уровне (в документации это не указано);
  • мой последний файл pyrightconfig.json довольно прост:
{
    //"verboseOutput": true,
    "reportMissingImports": "none",
    "reportMissingModuleSource": "none",
    "executionEnvironments": [
        {
          "root": ".",
          "extraPaths": ["library/src", "project1/src", "project2/src"]
        }
    ]
}

extraPaths решено из корневого каталога. Ему необходимо объявление src/subdir.

Другие вопросы по теме