同じセッションでLinuxシステムでVimで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を構築することは問題ではありませんので、両方のための動的ローディングをサポートしました。

回答:


17

私は現在DebianのVimメンテナーであり、参照されているメーリングリストの議論で引用されている人物です。

あなたが述べたように、これはVimに関する質問ではありません。それは、Vimがあなたのニーズを満たす方法でリンクするソフトウェアを構築することです。DebianのVimパッケージでPython3を有効することを要求するバグの問題について(少なくともDebianの面では)より徹底的な議論があります。

これは

  • DebianのPythonパッケージは、Python拡張機能を関連するlibpython共有ライブラリにリンクしません。これが、Python言語バインディングを動的にロードするために使用するRTLD_GLOBAL際に、DebianのVimパッケージの使用を要求する原因dlopen()です。

  • Vimパッケージと動的にロードされるライブラリの関係を表現して、適切なときにそれらが一緒にアップグレードされるようにする良い方法はありません。最初の点が解決されたとしても、この問題により、Pythonサポートの動的ロードを有効にできなくなります。

    Vimで言語サポートを動的にロードする主なポイントは、ユーザーが使用しないライブラリをインストールする必要がないことです。これは、Vimパッケージがライブラリの最小バージョンへの強い依存関係を指定できないことを意味します。

    したがって、古いバージョンとの後方互換性がないライブラリの新しいバージョンに対してVimがビルドされ、ユーザーがそれらを一緒にアップグレードしない場合、Vimはクラッシュします。これは、パッケージのユーザーに出会ってほしいものではありません。

言語サポートの動的読み込みを再度有効にできるようになりたい(2010〜2011年に少しの間使用可能になりました)が、上記の問題は最初に解決する必要があります。


バージョン2:7.4.2330-1の時点で、Debianのパッケージングは​​、PythonバインディングにPython2ではなくPython3を使用するように切り替わりました。


別の方法として、neovimパッケージは同じnvimプロセスからのPython2とPython3の両方の使用をサポートします。これは、Pythonサポートが外部モジュール(python-neovimおよびpython3-neovimパッケージ)によって提供されるためです。PythonコードをVimのように埋め込むのではなく、外部化することで、libpythonのビルド方法を扱う問題を回避できます。


「これは、Vimパッケージがライブラリの最小バージョンへの強い依存関係を指定できないことを意味します。」だからこそ、DebianにはArch LinuxのようにVim + Python2とVim + Python3の別々のパッケージがないのでしょうか?
ムル

@muru Pythonは、使用可能な言語バインディングの1つにすぎません。さまざまな言語とGUIツールキットのパッケージの組み合わせを提供することは、多数のパッケージです。妥当な数の言語バインディングを有効にし、GUIツールキットから選択する(またはしない)ことを決定しました。ユーザーは、記述されている言語に基づいてVimプラグインを選択する必要はありません
。– jamessan

PythonとPython3のみが互いに競合するため、これは本当の議論ではありません。私は正直、Arch開発者の本から葉を借りるべきだと思います。別に共通のvim-runtimeパッケージに、彼らが持っているvimgvimvim-python3gvim-python3-python3パッケージと通常のパッケージの唯一の違いは、有効なPythonのバージョンです。確かに、フロントエンドパッケージの数は2倍になりますが、そのようなパッケージに見られるすべての欠陥です。
ムル

これがArchです。Debianのでは、ありますvim-noxvim-gtkvim-gnome、とvim-athena。ユーザーがまだPythonプラグインとPython3プラグインの両方を使用できないようにこれらを2倍にすることは価値がないようです。
ジェムサン

通常のパッケージで動的オプションを選択しなかった理由については、少し興味があります。
ムル

4

Ubuntu 16.04のvim-*-py2パッケージがリポジトリに含まれるようになりました。これは、すべてのDebian Vimユーザーが必要に応じてUbuntuに移行できることを意味します。

erstwhile vim-*パッケージはを提供するよう+python3になり、競合を回避するためにバイナリに異なる名前が付けられました。

等々。


だから、16.04に、同じVimセッションでpython2とpython3をロードできますか?
ムル

@muruいいえ、特定のセッションで取得するものをより簡単に選択できます;)
hobbs

@hobbsパッケージがpython3パッケージと競合することはかなり確かです。
ムル

@muru、実際にはそうではありません。どちらを選択してもインストールして実行でき、デフォルトのvimとして選択することもできます。それは素晴らしいことではありませんが、改善されています。
ホッブズ

2
そして、17.04では、Python 2のサポートと関連するVimパッケージが削除されました
-muru
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.