Можно ли встраивать Jedi в приложение в системе, где Python не установлен? - PullRequest
0 голосов
/ 18 января 2019

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

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

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

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 Ответ

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

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

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

...