Можно ли встраивать джедаев в приложение в системе, где 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 только для того, чтобы работало автозаполнение.
Мои вопросы:
Можно ли заставить Джедая не создавать подпроцессы, а вместо этого запускать его код в том же экземпляре Python, в котором он сам работает? Я не смог найти ничего об этом в документации или в исходном коде, который имеет отношение к Средам, и, экстраполируя из обсуждения здесь, я подозреваю, что ответ может быть отрицательным.
Можно ли как-то заставить джедая использовать то же самое?
python37.dll
что наше приложение использует для своей функциональности, а не ищет.exe
файл, который не существует?Есть ли какой-нибудь способ, которым мы могли бы сделать какую-то минимальную установку Python внутри нашей существующей установки приложения, которая использует те же библиотеки DLL /Python Lib и т. Д.? Как я мог сделать это?
Есть ли другой способ заставить автодополнение Jedi работать в нашем приложении, не требуя от пользователя установки Python, или не включив полный установщик Python как часть нашего процесса сборки?
1 ответ
- Можно ли заставить Джедая не создавать подпроцессы, а вместо этого запускать его код в том же экземпляре Python, в котором он сам работает? Я не смог найти ничего об этом в документации или в исходном коде, который имеет отношение к Средам, и, экстраполируя из обсуждения здесь, я подозреваю, что ответ может быть отрицательным.
Это определенно возможно. Все инструменты есть. Здесь продолжаются дискуссии: https://github.com/davidhalter/jedi-vim/issues/870.
ИМО нужен патч для джедая, который использует jedi.api.environment.InterpreterEnvironment
в некоторых случаях, как у вас. Это определенно возможно, это просто глючит в данный момент.