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

时间:2019-01-18 11:03:26

标签: python autocomplete subprocess scintilla python-jedi

我正在使用uses Python as an embedded scripting language的(Windows和Mac)应用程序。

该应用程序包括一个内部文本编辑器,使用Scintilla实现,而我使用Jedi进行自动填充,通常效果很好。

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

  

jedi.api.environment.InvalidPythonEnvironment

     

无法获取“ python”的版本信息:

     

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

深入研究代码,我可以看到the underlying code that is throwing FileNotFoundError是Jedi尝试使用python运行subprocess.Popen的时候。尚未在计算机上安装Python,因此失败。

我还可以通过编辑我的Path环境变量以不包含python.exe的位置,在安装了 的计算机上重现同样的问题。

理想情况下,我们不希望应用程序的用户仅为了自动完成工作而安装Python。

我的问题:

  1. 是否可以让Jedi not 生成子进程,然后在其本身正在运行的同一Python实例中运行其代码?我在有关环境的文档或源代码中找不到关于此的任何内容,并且从discussion here推断出我怀疑答案可能是否定的。

  2. 是否可以使Jedi使用我们的应用程序用于其功能的python37.dll,而不是查找不存在的.exe文件?

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

  4. 还有其他方法可以使Jedi自动完成功能在我们的应用程序中运行而无需用户安装Python或在我们的构建过程中包括完整的Python安装程序吗?

1 个答案:

答案 0 :(得分:1)

  1. 是否可以让Jedi不产生子进程,而是在其自身正在运行的同一Python实例中运行其代码?我在有关环境的文档或源代码中找不到关于此的任何内容,并且从此处的讨论推论得出,我怀疑答案可能是否定的。

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

IMO需要一个绝地补丁,在您这样的情况下,使用jedi.api.environment.InterpreterEnvironment。绝对有可能,目前只是越野车。