我正在使用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。
我的问题:
是否可以让Jedi not 生成子进程,然后在其本身正在运行的同一Python实例中运行其代码?我在有关环境的文档或源代码中找不到关于此的任何内容,并且从discussion here推断出我怀疑答案可能是否定的。
是否可以使Jedi使用我们的应用程序用于其功能的python37.dll
,而不是查找不存在的.exe
文件?
有什么方法可以在使用相同DLL / Python Lib等的现有应用程序安装中进行某种最小的Python安装吗?我该怎么做呢?
还有其他方法可以使Jedi自动完成功能在我们的应用程序中运行而无需用户安装Python或在我们的构建过程中包括完整的Python安装程序吗?
答案 0 :(得分:1)
这绝对是可能的。所有工具都在那里。这里正在进行讨论:https://github.com/davidhalter/jedi-vim/issues/870。
IMO需要一个绝地补丁,在您这样的情况下,使用jedi.api.environment.InterpreterEnvironment
。绝对有可能,目前只是越野车。