Я работаю над приложением (для 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 только для того, чтобы работало автозаполнение.
Мои вопросы:
Можно ли заставить джедаев , а не порождать подпроцессы, и вместо этого запустить его код внутри того же экземпляра Python, в котором он сам работает? Я не смог найти ничего об этом в документации или в исходном коде, который имеет отношение к Средам, и экстраполируя из обсуждения здесь Я подозреваю, что ответ может быть нет.
Возможно ли каким-то образом заставить Джедая использовать тот же python37.dll
, который наше приложение использует для своей функциональности, вместо поиска .exe
файла, который не существует?
Есть ли какой-нибудь способ, которым мы могли бы сделать какую-то минимальную установку Python внутри нашей существующей установки приложения, которая использует те же библиотеки DLL / Python Lib и т. Д.? Как я могу сделать это?
Есть ли другой способ заставить автодополнение Jedi работать в нашем приложении, не требуя от пользователя установки Python или включая полный установщик Python как часть нашего процесса сборки?