是否可以将 Jedi 嵌入到未安装 Python 的系统上的应用程序中?

Is it possible to embed Jedi in an application on a system where Python is not installed?

我正在开发 uses Python as an embedded scripting language.

的(Windows 和 Mac)应用程序

该应用程序包括一个内部文本编辑器,使用 Scintilla, and I'm using Jedi 实现自动完成,通常效果很好。

但是,当尝试在未单独安装 Python 的计算机上自动完成时,Jedi 会引发错误:

jedi.api.environment.InvalidPythonEnvironment:

Could not get version information for 'python':

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

深入研究代码,我可以看到 the underlying code that is throwing FileNotFoundError 是 Jedi 尝试使用 subprocess.Popen 运行 python 的时候。 Python电脑上没有安装,所以失败。

我也可以在 安装了 Python 的计算机上重现相同的问题,方法是编辑我的 Path 环境变量,使其不包含 Python 的位置python.exe.

理想情况下,我们不希望我们的应用程序的用户必须安装 Python 才能让自动完成工作。

我的问题:

  1. 是否有可能让 Jedi 不是 产生子进程,而是 运行 它的代码在 Python 的同一个实例中它本身就是运行ning?我在处理环境的文档或源代码中找不到任何关于此的信息,并且从 discussion here 推断我怀疑答案可能是否定的。

  2. 是否有可能以某种方式让 Jedi 使用我们的应用程序正在使用的相同 python37.dll 来实现其功能,而不是寻找不存在的 .exe 文件?

  3. 有什么方法可以在我们现有的使用相同 DLLs/Python 库等的应用程序安装中进行某种最小化 Python 安装?我该怎么做呢?

  4. 是否有任何其他方法可以让 Jedi 自动完成功能在我们的应用程序中工作,而不需要用户安装 Python,或者包括完整的 Python 安装程序作为我们构建的一部分过程?

  1. 是否有可能让 Jedi 不产生子进程,而是 运行 它的代码在 Python 的同一个实例中,它本身是 运行ning?我在处理环境的文档或源代码中找不到任何相关信息,从这里的讨论推断我怀疑答案是否定的。

这绝对有可能。所有的工具都在那里。此处正在进行讨论:https://github.com/davidhalter/jedi-vim/issues/870.

IMO 需要 Jedi 的补丁,在某些情况下使用 jedi.api.environment.InterpreterEnvironment,例如您的情况。绝对有可能,目前只是bug。