在Linux系统上,打包的Vim通常仅启用pythonpython3之一。可以同时启用两者(使用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没问题。

#1 楼

我是Debian的现任Vim维护者,并且在引用的邮件列表讨论中引用了该人。
正如您所说,这不是有关Vim的问题。这是关于构建Vim以符合您需求的方式链接的软件。要求在Debian的Vim封装中启用Python3的错误中(至少在Debian方面)对此问题进行了更全面的讨论。
归结为



Python打包不会将Python扩展链接到相关的libpython共享库。这就是导致Debian的Vim打包在使用RTLD_GLOBAL动态加载Python语言绑定时要求使用dlopen()的原因。

没有好的方法来表达Vim软件包与动态加载的库,以确保它们在适当的时候一起升级。即使解决了第一点,这个问题仍然会阻止我启用对Python支持的动态加载。
在Vim中动态加载语言支持的要点是不要求用户安装他们不会使用的库。采用。这意味着Vim打包不能指定对最低版本库的硬依赖性。
因此,如果Vim是针对较新版本的库构建的,而该新版本与旧版本和用户不向后兼容不能一起升级它们,Vim会崩溃。这不是我希望软件包的用户遇到的问题。


我希望能够重新启用该功能(该功能在2010年推出了很短的时间, 2011年)动态加载语言支持,但必须首先解决上述问题。

从版本2:7.4.2330-1开始,Debian的包装已改为使用Python3代替Python2绑定。

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

评论


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

–muru
2015年2月25日在22:49



@muru Python只是可用的语言绑定之一。提供大量用于不同语言和GUI工具包的软件包的组合。决定是尽可能地启用尽可能多的语言绑定,并在GUI工具包中进行选择(或不选择)。用户不必根据编写语言选择Vim插件。

–詹姆斯
2015年2月26日在2:23

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

–muru
2015年2月26日在2:55



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

–詹姆斯
2015年2月26日,下午3:07

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

–muru
16 Sep 14'0:46

#2 楼

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

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



vim.noxvim-nox+python3


vim.nox-py2vim-nox-py2+python


依此类推。

评论


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

–muru
16年6月6日在19:15

@muru不,您可以轻松选择给定会话中的哪个;)

–霍布斯
16年4月14日下午5:32

@hobbs我很确定软件包与python3冲突。

–muru
16年4月14日在6:00

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

–霍布斯
16-4-14在6:18



现在从17.04开始,Python 2支持和相关的Vim软件包已被删除。

–muru
17年8月29日在16:18