我正在开发使用 Python 作为嵌入式脚本语言的(Windows 和 Mac)应用程序。
该应用程序包括一个内部文本编辑器,使用Scintilla实现,我使用Jedi进行自动完成,通常效果很好。
但是,在没有单独安装 Python 的计算机上尝试自动完成时,Jedi 会引发错误:
jedi.api.environment.InvalidPythonEnvironment
:无法获取“python”的版本信息:
FileNotFoundError(2, 'The system cannot find the file specified', None, 2, None)
深入研究代码,我可以看到抛出的底层代码是FileNotFoundError
Jedi 尝试python
使用subprocess.Popen
. 计算机上未安装 Python,因此失败。
我还可以在安装了 Python 的计算机上重现相同的问题,方法是编辑我的环境Path
变量以不包含python.exe
.
理想情况下,我们不希望应用程序的用户必须安装 Python 才能让自动完成功能正常工作。
我的问题:
是否有可能让 Jedi不产生子进程,而是在它本身正在运行的 Python 的同一个实例中运行它的代码?我在文档或处理环境的源代码中找不到任何关于此的内容,从这里的讨论中推断,我怀疑答案可能是否定的。
是否有可能以某种方式让 Jedi 使用
python37.dll
我们的应用程序用于其功能的相同内容,而不是寻找.exe
不存在的文件?有什么方法可以在我们现有的应用程序安装中进行某种最小的 Python 安装,使用相同的 DLL/Python Lib 等?我怎么能这样做呢?
有没有其他方法可以让 Jedi 自动完成功能在我们的应用程序中运行,而无需用户安装 Python,或者在我们的构建过程中包含完整的 Python 安装程序?