如何使Vim能够在同一会话中的Linux系统上同时运行python和python3?


28

在Linux系统上,打包的Vim通常仅具有python或之一python3。可以同时启用两者(使用python/dynpython3/dyn),但是在会话期间只能使用一个。邮件列表讨论中说

这取决于Python库的构建方式。在基于Debian的系统上(出于某种原因,我不会立即记起),它们的构建方式使得必须使用RTLD_GLOBAL来访问符号。这样可以防止在同一进程中同时加载libpython2.x和libpython3.x。

要在同一会话中同时加载两者,可以做些什么?

我可以看到的选项:

  • 重建Python {2,3}软件包,以便RTLD_GLOBAL(无论可能如何)都不需要。
  • 不知何故,可以使库早先加载,然后由Vim卸载(?!)。(有可能吗?)

对于发行版的任何细节,请以增加的特异性顺序进行假设:

  • 基于Debian
  • 的Ubuntu
  • Ubuntu 14.04
  • 或者,如果基于Debian的系统过于复杂,则使用Arch Linux。

请注意,我已经为Vim构建了动态加载支持,因此构建Vim并不是问题。

Answers:


17

我是Debian的当前Vim维护者,并且是引用的邮件列表讨论中引用的人。

如您所说,这不是关于Vim的问题。这是关于构建Vim以符合您需求的方式链接的软件。要求在Debian的Vim包装中启用Python3的错误中(至少在Debian方面)对此问题进行了更全面的讨论。

归结为

  • Debian的Python打包没有将Python扩展链接到相关的libpython共享库。这就是导致RTLD_GLOBAL在使用Debian的Vim软件包dlopen()动态加载Python语言绑定时必须使用的原因。

  • 没有好的方法来表达Vim软件包和动态加载的库之间的关系,以确保在适当时一起升级。即使解决了第一点,此问题仍将阻止我启用Python支持的动态加载。

    在Vim中动态加载语言支持的要点是不要求用户安装不使用的库。这意味着Vim打包不能指定对最低版本库的严格依赖。

    因此,如果Vim是基于较新版本的库构建的,而该库的新版本与旧版本不向后兼容,并且用户未将它们一起升级,则Vim将会崩溃。这不是我希望软件包的用户遇到的问题。

我希望能够重新启用语言支持(在2010-2011年仅提供了很短的时间),但是必须首先解决上述问题。


从版本2:7.4.2330-1开始,Debian的打包方式已转换为使用Python3代替Python2进行Python绑定。


作为替代方案,neovim软件包支持使用同一nvim进程中的Python2和Python3,因为Python支持由外部模块提供(python-neovimpython3-neovim软件包)。外部化Python代码(而不是像Vim一样进行嵌入)避免了处理libpython的构建问题。


“这意味着Vim打包不能指定对最低版本库的严格依赖。” 我认为这就是为什么Debian没有Arch Linux那样的针对Vim + Python2和Vim + Python3的单独软件包的原因?
muru

@muru Python只是可用的语言绑定之一。提供大量用于不同语言和GUI工具包的软件包组合。决定是尽可能地启用尽可能多的语言绑定,并在GUI工具包中进行选择(或不选择)。用户不应该选择基于他们所使用的语言Vim的插件。
jamessan

这不是一个真正的论据,因为只有Python和Python3相互冲突。老实说,我认为您应该借鉴Arch开发人员的书。除了常见的vim-runtime包,他们有vimgvimvim-python3gvim-python3-python3和普通软件包之间的唯一区别是启用的Python版本。当然,它使前端程序包的数量增加了一倍,但这就是我在此类程序包中看到的所有缺陷。
muru 2015年

那是拱门。在Debian中,有vim-noxvim-gtkvim-gnome,和vim-athena。将它们加倍以使用户仍然不能同时使用Python和Python3插件似乎并不值得。
jamessan

我对您为什么不为常规软件包选择动态选项感到好奇。
muru

4

Ubuntu 16.04现在已经vim-*-py2在仓库中包含了软件包。这意味着所有Debian Vim用户都可以根据需要迁移到Ubuntu。

以前的vim-*软件包现在提供+python3,二进制文件的名称也不同,以免发生冲突:

等等。


那么,在16.04上,我可以在同一Vim会话中加载python2和python3吗?
muru

@muru不,您可以选择在给定会话中更轻松地选择哪一个;)
hobbs

@hobbs我很确定软件包与python3冲突。
muru 16-4-14

@muru他们实际上不是。您可以安装并运行任意一个,也可以选择一个作为默认vim。这不是很好,但这是一种改进。
hobbs

2
而现在的17.04版本中,已经删除了对Python 2的支持以及相关的Vim软件包
muru
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.