【发布时间】:2019-01-18 11:03:26
【问题描述】:
我正在开发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 尝试使用 subprocess.Popen 运行 python 的时候。计算机上未安装 Python,因此失败。
我还可以在确实安装了 Python 的计算机上重现相同的问题,方法是编辑我的 Path 环境变量,使其不包含 python.exe 的位置。
理想情况下,我们不希望我们应用程序的用户必须安装 Python 才能让自动完成功能正常工作。
我的问题:
是否有可能让 Jedinot 生成子进程,而是在其自身运行的同一 Python 实例中运行其代码?我在文档或处理环境的源代码中找不到任何关于此的内容,并且从discussion here 推断我怀疑答案可能是否定的。
是否有可能让 Jedi 使用我们的应用程序用于其功能的相同
python37.dll,而不是寻找不存在的.exe文件?有什么方法可以在我们现有的应用程序安装中使用相同的 DLL/Python Lib 等进行某种最小的 Python 安装?我该怎么做呢?
有没有其他方法可以让 Jedi 自动完成功能在我们的应用中运行,而无需用户安装 Python,或者在我们的构建过程中包含完整的 Python 安装程序?
【问题讨论】:
标签: python autocomplete subprocess scintilla python-jedi