Можно ли встраивать джедаев в приложение в системе, где Python не установлен?

Я работаю над приложением (для Windows и Mac), которое использует Python как встроенный язык сценариев.

Приложение включает в себя внутренний текстовый редактор, реализованный с использованием Scintilla, и я использую Jedi для автозаполнения, что в целом прекрасно работает.

Однако при попытке автозаполнения на компьютере, на котором не установлена ​​отдельная установка Python, Jedi выдает ошибку:

jedi.api.environment.InvalidPythonEnvironment:

Не удалось получить информацию о версии для 'python':

FileNotFoundError(2, 'The system cannot find the file specified', None, 2, None)

Копаясь в коде, я вижу, что основной код, который бросает FileNotFoundError когда джедай пытается убежать python с помощью subprocess.Popen, Python не установлен на компьютере, поэтому он не работает.

Я также могу воспроизвести ту же проблему на компьютере, на котором установлен Python, отредактировав мой Path переменная окружения, чтобы не включать местоположение python.exe,

В идеале, мы не хотим, чтобы пользователи нашего приложения устанавливали Python только для того, чтобы работало автозаполнение.

Мои вопросы:

  1. Можно ли заставить Джедая не создавать подпроцессы, а вместо этого запускать его код в том же экземпляре Python, в котором он сам работает? Я не смог найти ничего об этом в документации или в исходном коде, который имеет отношение к Средам, и, экстраполируя из обсуждения здесь, я подозреваю, что ответ может быть отрицательным.

  2. Можно ли как-то заставить джедая использовать то же самое? python37.dll что наше приложение использует для своей функциональности, а не ищет .exe файл, который не существует?

  3. Есть ли какой-нибудь способ, которым мы могли бы сделать какую-то минимальную установку Python внутри нашей существующей установки приложения, которая использует те же библиотеки DLL /Python Lib и т. Д.? Как я мог сделать это?

  4. Есть ли другой способ заставить автодополнение Jedi работать в нашем приложении, не требуя от пользователя установки Python, или не включив полный установщик Python как часть нашего процесса сборки?

1 ответ

Решение
  1. Можно ли заставить Джедая не создавать подпроцессы, а вместо этого запускать его код в том же экземпляре Python, в котором он сам работает? Я не смог найти ничего об этом в документации или в исходном коде, который имеет отношение к Средам, и, экстраполируя из обсуждения здесь, я подозреваю, что ответ может быть отрицательным.

Это определенно возможно. Все инструменты есть. Здесь продолжаются дискуссии: https://github.com/davidhalter/jedi-vim/issues/870.

ИМО нужен патч для джедая, который использует jedi.api.environment.InterpreterEnvironment в некоторых случаях, как у вас. Это определенно возможно, это просто глючит в данный момент.

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