मैं एक ही सत्र में लिनक्स सिस्टम पर अजगर और अजगर 3 दोनों को चलाने में सक्षम होने के लिए विम कैसे प्राप्त करूं?


28

लिनक्स सिस्टम पर, पैकेज्ड विम का आमतौर पर केवल एक ही pythonया python3इनेबल होता है। यह संभव है के लिए दोनों सक्षम होने के लिए (का उपयोग करते हुए python/dynऔर python3/dyn), लेकिन एक सत्र के दौरान केवल एक ही इस्तेमाल किया जा सकता। इस मेलिंग सूची चर्चा में कहा गया है :

यह इस बात पर निर्भर करता है कि पायथन पुस्तकालय कैसे बनाए जाते हैं। डेबियन-आधारित सिस्टम (जिन कारणों से मैं ऑफहैंड को याद नहीं करता हूं) के लिए, वे ऐसे बनाए जाते हैं कि RTLD_GLOBAL का उपयोग प्रतीकों तक पहुंचने के लिए किया जाना है। यह एक ही प्रक्रिया में libpython2.x और libpython3.x दोनों को लोड करने से रोकता है।

एक ही सत्र में दोनों को लोड करने में सक्षम करने के लिए क्या किया जा सकता है?

विकल्प जो मैं देख सकता हूं:

  • अजगर {2,3} पैकेजों को फिर से बनाएं ताकि RTLD_GLOBAL(जो भी हो) की जरूरत न हो।
  • किसी तरह पहले से भरी हुई लाइब्रेरी को लोड किया जाए (!) विम द्वारा। (क्या यह भी संभव है?)

विशिष्टता के बढ़ते क्रम में, डिस्ट्रो के किसी भी विवरण के लिए:

  • डेबियन-आधारित
  • उबंटू
  • उबंटू 14.04
  • या, आर्क लिनक्स, अगर एक डेबियन-आधारित प्रणाली बहुत जटिल है।

ध्यान दें कि मुझे दोनों के लिए गतिशील लोडिंग समर्थन के साथ बनाने के लिए विम मिला है , इसलिए विम का निर्माण कोई समस्या नहीं है।

जवाबों:


17

मैं डेबियन के लिए वर्तमान विम अनुचर हूं और संदर्भित मेलिंग सूची चर्चा में उद्धृत व्यक्ति।

जैसा कि आपने कहा, यह विम के बारे में सवाल नहीं है। यह सॉफ्टवेयर बनाने के बारे में है जो विम आपकी आवश्यकताओं को पूरा करने वाले तरीके से जोड़ता है। वहाँ एक और अधिक गहन चर्चा (कम से कम डेबियन पहलू के लिए) एक मुद्दा है जो पायथन 3 से अनुरोध करता है कि डेबियन की विम पैकेजिंग में सक्षम होना चाहिए

यह करने के लिए उबाल

  • डेबियन के पाइथन पैकेजिंग प्रासंगिक लिबेथॉन साझा पुस्तकालय के खिलाफ पायथन एक्सटेंशन को लिंक नहीं करता है। पायथन भाषा बाइंडिंग को गतिशील रूप से लोड करने के लिए RTLD_GLOBALउपयोग करते समय डेबियन की विम पैकेजिंग का उपयोग करने की आवश्यकता होती है dlopen()

  • विम पैकेज और गतिशील रूप से लोड किए गए पुस्तकालयों के बीच संबंधों को व्यक्त करने के लिए अच्छे तरीके नहीं हैं, यह सुनिश्चित करने के लिए कि वे उपयुक्त होने पर एक साथ अपग्रेड किए जाते हैं। यहां तक ​​कि अगर पहले बिंदु को हल किया गया था, तब भी यह मुद्दा मुझे पायथन समर्थन के गतिशील लोडिंग को सक्षम करने से रोक देगा।

    विम में भाषा समर्थन को गतिशील रूप से लोड करने का मुख्य बिंदु उपयोगकर्ताओं को उन पुस्तकालयों को स्थापित करने की आवश्यकता नहीं है जो वे उपयोग नहीं करेंगे। इसका मतलब यह है कि विम पैकेजिंग एक लाइब्रेरी के न्यूनतम संस्करण पर एक कठिन निर्भरता को निर्दिष्ट नहीं कर सकती है।

    इसलिए, यदि विम एक लाइब्रेरी के नए संस्करण के खिलाफ बनाया गया है जो पुराने संस्करण के साथ पीछे की ओर संगत नहीं है और उपयोगकर्ता उन्हें एक साथ अपग्रेड नहीं करता है, तो विम क्रैश हो जाएगा। यह ऐसा कुछ नहीं है जो मैं चाहता हूं कि संकुल के उपयोगकर्ता मुठभेड़ करें।

मैं फिर से सक्षम करने में सक्षम होना चाहूंगा (यह थोड़ी देर के लिए 2010-2011 में उपलब्ध था) भाषा समर्थन का गतिशील लोडिंग, लेकिन उपरोक्त मुद्दों को पहले हल करना होगा।


संस्करण 2: 7.4.2330-1 के अनुसार , डेबियन की पैकेजिंग ने पायथन बाइंडिंग के लिए पायथन 2 के बजाय पायथन 3 का उपयोग करने के लिए स्विच किया है।


एक विकल्प के रूप में, नव-पैकेज एक ही nvim प्रक्रिया से Python2 और Python3 दोनों के उपयोग का समर्थन करता है, क्योंकि Python समर्थन बाह्य मॉड्यूल ( अजगर-नव-नव और python3-neovim संकुल) द्वारा प्रदान किया जाता है । अजगर कोड को बाहरी करना, इसे विम की तरह एम्बेड करने के बजाय, कामेच्छा कैसे बनाया जाता है, इससे निपटने के मुद्दे से बचा जाता है।


"इसका मतलब है कि विम पैकेजिंग किसी लाइब्रेरी के न्यूनतम संस्करण पर एक कठिन निर्भरता को निर्दिष्ट नहीं कर सकती है।" मुझे लगता है यही कारण है कि डेबियन के पास Vim + Python2 और Vim + Python3 के लिए अलग-अलग पैकेज नहीं हैं, जिस तरह आर्क लिनक्स के पास है?
मूरू

@ मरमू पायथन केवल भाषा बाइंडिंग में से एक है। विभिन्न भाषाओं और GUI टूलकिट के लिए संकुल का संयोजन प्रदान करना बड़ी संख्या में संकुल है। यह निर्णय उचित रूप में कई भाषा बाँधने के लिए सक्षम होना था और चुनाव GUI टूलकिट (या नहीं) के बीच होना चाहिए। उपयोगकर्ता को उस भाषा के आधार पर विम प्लग का चयन नहीं करना चाहिए जिस भाषा में वे लिखे गए हैं।
जामसन

यह एक वास्तविक तर्क नहीं है, क्योंकि केवल पायथन और पायथन 3 एक दूसरे से संघर्ष करते हैं। मुझे ईमानदारी से लगता है कि आपको आर्क डेवलपर्स की किताब से एक पत्ता उधार लेना चाहिए। एक आम के अलावा vim-runtimeपैकेज, वे vim, gvim, vim-python3और gvim-python3-python3और सामान्य पैकेज के बीच एकमात्र अंतर पायथन के सक्षम संस्करण का है। ज़रूर, यह फ्रंटएंड पैकेजों की संख्या को दोगुना कर देता है, लेकिन इस तरह की पैकेजिंग में मुझे जो भी दोष दिखाई देता है, वह सब है।
मुरु

वह आर्क के लिए है। डेबियन में, वहाँ है vim-nox, vim-gtk, vim-gnome, और vim-athena। उन पर संदेह करना ताकि उपयोगकर्ता अभी भी Python और Python3 दोनों प्लगइन्स का उपयोग न कर सकें, सार्थक नहीं लगते हैं।
जामसेन 3

मैं हल्के से उत्सुक हूं कि आपने सामान्य पैकेज के लिए गतिशील विकल्प क्यों नहीं चुना।
मुरु

4

Ubuntu 16.04 में अब vim-*-py2रेपो में शामिल पैकेज हैं। इसका मतलब है कि सभी डेबियन विम उपयोगकर्ता जरूरत पड़ने पर उबंटू की ओर पलायन कर सकते हैं।

पूर्ववर्ती vim-*पैकेज अब प्रदान करते हैं +python3, और द्वंद्ववादियों को संघर्ष से बचने के लिए अलग नाम दिया गया है:

  • vim.noxके लिए vim-noxऔर+python3
  • vim.nox-py2के लिए vim-nox-py2और+python

और इसी तरह।


तो, 16.04 पर, मैं एक ही विम सत्र में python2 और python3 लोड कर सकता हूं?
मुरु

@ एमरू नहीं, आप बस एक दिए गए सत्र में जो प्राप्त कर सकते हैं, वह अधिक आसानी से प्राप्त कर सकते हैं;)
हॉब्स

@ मुझे लगता है मुझे यकीन है कि python3 लोगों के साथ संकुल संघर्ष।
मूरू

@ वे वास्तव में नहीं हैं। आप जो भी चुनते हैं, दोनों को स्थापित कर सकते हैं और चला सकते हैं, साथ ही एक को अपना डिफ़ॉल्ट विम चुन सकते हैं। यह बहुत अच्छा नहीं है, लेकिन यह एक सुधार है।
होब्स

2
और अब 17.04 के साथ, पायथन 2 समर्थन और प्रासंगिक विम पैकेज को गिरा दिया गया है
muru
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.