Vim'in aynı oturumda hem Linux hem de python3'ü Linux sisteminde çalıştırabilmesini nasıl sağlayabilirim?


28

Linux sistemlerinde, paketlenmiş Vim tipik olarak ikisinden birine sahiptir pythonveya python3etkindir. Her ikisinin de etkinleştirilmesi ( python/dynve kullanımı python3/dyn) mümkündür, ancak bir oturum sırasında yalnızca biri kullanılabilir. Bu posta listesi tartışmasında şöyle dedi :

Python kütüphanelerinin nasıl inşa edildiğine bağlıdır. Debian tabanlı sistemlerde (önceden hatırlamıyor olmama nedenleriyle), sembollere erişmek için RTLD_GLOBAL'in kullanılması gerektiği şekilde oluşturuluyorlar. Bu, aynı işlem sırasında hem libpython2.x hem de libpython3.x yüklenmesini önler.

Her ikisinin de aynı oturumda yüklenmesini sağlamak için ne yapılabilir?

Görebildiğim seçenekler:

  • Python {2,3} paketlerini RTLD_GLOBAL(ne olursa olsun) gerekmeyecek şekilde yeniden oluşturun.
  • Her nasılsa, kütüphanenin daha önce Vim tarafından boşaltılarak (?!) Yüklenmesini sağlayın. (Bu mümkün mü?)

Dağıtımın herhangi bir özelliği için, özgüllük sırasının arttırıldığını varsayalım:

  • Debian tabanlı
  • Ubuntu
  • Ubuntu 14.04
  • Ya da Debian tabanlı bir sistem çok karmaşıksa, Arch Linux.

Her ikisine de dinamik yükleme desteğiyle inşa etmek için Vim'e sahip olduğumu ve bu nedenle Vim'i inşa etmenin sorun olmadığını unutmayın.

Yanıtlar:


17

Ben Debian ve referans verilen posta listesi tartışmasında kote edilen kişi için mevcut Vim sağlayıcısıyım.

Dediğiniz gibi, bu Vim hakkında bir soru değil. Vim'in ihtiyaçlarınızı karşılayacak şekilde bağladığı yazılımı kurmakla ilgilidir. Python3'ün Debian'ın Vim paketlemesinde etkinleştirilmesini isteyen bir hatada konuyla ilgili daha ayrıntılı bir tartışma (en azından Debian yönü) var.

Bu aşağı kaynar

  • Debian'ın Python paketi, Python uzantılarını ilgili libpython paylaşılan kütüphanesine bağlamaz. Bu, Debian'ın Vim paketlemesinin Python dili bağlarını dinamik olarak yüklemek için RTLD_GLOBALkullanılmasını gerektirmesini sağlayan şeydir dlopen().

  • Uygun olduğunda birlikte yükseltilmelerini sağlamak için Vim paketleri ve dinamik olarak yüklenmiş kitaplıklar arasındaki ilişkiyi ifade etmenin iyi bir yolu yoktur. İlk nokta çözülse bile, bu sorun Python desteğinin dinamik yüklenmesini sağlamamı engeller.

    Dil desteğini Vim'e dinamik olarak yüklemenin ana noktası, kullanıcıların kullanmayacakları kütüphaneleri kurmalarını gerektirmemektir. Bu, Vim ambalajının bir kütüphanenin minimum versiyonuna sert bir bağımlılık belirtemediği anlamına gelir.

    Bu nedenle, Vim, eski sürümle geriye dönük olarak uyumlu olmayan bir kitaplığın daha yeni bir sürümüne karşı oluşturulmuşsa ve kullanıcı bunları birlikte yükseltmezse, Vim çökecektir. Bu, paket kullanıcılarının kullanıcılarının karşılaşmasını istediğim bir şey değil.

Yeniden etkinleştirmeyi çok isterdim (2010-2011'de kısa bir süre için mevcuttu), dil desteğinin dinamik yüklenmesi, ancak yukarıdaki sorunların önce çözülmesi gerekiyor.


Sürüm 2: 7.4.2330-1'den itibaren Debian'ın ambalajı, Python bağlamaları için Python2 yerine Python3 kullanmaya geçmiştir.


Alternatif olarak, neovim paketi, Python desteği, harici modüller ( python-neovim ve python3-neovim paketleri) tarafından sağlandığı için, aynı nvim işleminden hem Python2 hem de Python3'ün kullanımını destekler . Python kodunu dışlamak, Vim gibi gömmek yerine libpython'un nasıl oluşturulduğuyla ilgilenmekten kaçınır.


“Bu, Vim ambalajının bir kütüphanenin asgari sürümüne sert bir bağımlılık koyamayacağı anlamına geliyor.” Sanırım Debian'ın Arch Linux'ta olduğu gibi Vim + Python2 ve Vim + Python3 için ayrı paketleri yok.
muru

@muru Python, mevcut dil bağlantılarından sadece bir tanesidir. Farklı diller ve GUI araç takımları için paket kombinasyonları sağlamak çok sayıda pakettir. Karar makul olduğu kadar çok dil bağlamayı mümkün kılmak ve seçimin GUI araç takımları arasında (veya olmasın) yapılmasına izin vermekti. Bir kullanıcının Vim eklentilerini yazdıkları dile göre
seçmesi gerekmemelidir

Bu sadece bir Python ve Python3 birbirleriyle çatışan bir gerçek tartışma değil. Dürüst olmak gerekirse, Arch geliştiricileri kitabından bir yaprak ödünç almanız gerektiğini düşünüyorum. Kenara ortak gelen vim-runtimepaketin, sahip oldukları vim, gvim, vim-python3ve gvim-python3. -python3Normal paketler arasındaki tek fark , etkin Python sürümüdür. Elbette, ön paket sayısını iki katına çıkarır, ancak bu tür paketlerde gördüğüm tüm kusur budur.
muru

Bu Arch için. Debian yılında orada vim-nox, vim-gtk, vim-gnome, ve vim-athena. Bunları sadece kullanıcıların Python ve Python3 eklentilerini kullanamayacakları şekilde yapmak, pek de işe yaramaz.
jamessan

Normal paketler için neden dinamik seçeneği seçmediğinizi merak ediyorum.
muru

4

Ubuntu 16.04 şimdi depoya vim-*-py2dahil paketleri var. Bu, tüm Debian Vim kullanıcılarının gerektiğinde Ubuntu'ya geçiş yapabileceği anlamına gelir.

Eski vim-*paketler şimdi sağlamak +python3ve ikili önlemek çatışma değişik isimler almaktadır:

Ve bunun gibi.


Yani, 16.04'te, aynı Vim oturumunda python2 ve python3'ü yükleyebilir miyim?
muru

@muru no, hangisini daha kolay bir oturumda alacağınızı seçebilirsiniz;)
hobbs

@ hobbs Paketlerin python3 paketleriyle çakıştığından eminim.
muru,

@muru, aslında değil. Hangisini seçerseniz seçin, hangisini seçerseniz seçin, varsayılan vim için birini seçin. Harika değil, ama bir gelişme.
hobbs

2
Ve şimdi 17.04 ile Python 2 desteği ve ilgili Vim paketleri düşürüldü
muru
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.