ฉันจะให้ Vim สามารถรันทั้ง python และ python3 บนระบบ Linux ในเซสชันเดียวกันได้อย่างไร


28

บนระบบ Linux, Vim ที่แพ็กเกจมักมีเพียงหนึ่งpythonหรือpython3เปิดใช้งาน เป็นไปได้ที่จะเปิดใช้งานทั้งคู่ (ใช้python/dynและpython3/dyn) แต่ในระหว่างเซสชันสามารถใช้งานได้เพียงครั้งเดียว การสนทนารายชื่อผู้รับจดหมายนี้กล่าวว่า :

ขึ้นอยู่กับวิธีการสร้างไลบรารี่ของ Python บนระบบที่ใช้เดเบียน (ด้วยเหตุผลที่ฉันจำไม่ได้ในทันที) พวกมันถูกสร้างขึ้นเพื่อให้ RTLD_GLOBAL ต้องใช้เพื่อเข้าถึงสัญลักษณ์ สิ่งนี้ป้องกันการโหลดทั้ง libpython2.x และ libpython3.x ในกระบวนการเดียวกัน

ฉันสามารถทำอะไรได้บ้างเพื่อเปิดใช้งานการโหลดทั้งสองอย่างในเซสชันเดียวกัน

ตัวเลือกที่ฉันเห็น:

  • สร้าง Python {2,3} แพ็คเกจใหม่เพื่อRTLD_GLOBALไม่ให้จำเป็นต้องมีสิ่งใด ๆ
  • อย่างใดทำให้ห้องสมุดโหลดก่อนหน้านี้เพื่อยกเลิกการโหลด (?!) โดย Vim (นั่นเป็นไปได้หรือไม่)

สำหรับรายการใด ๆ ของ distro ให้สมมติเพื่อเพิ่มความจำเพาะ:

  • Debian-based
  • อูบุนตู
  • Ubuntu 14.04
  • หรือ Arch Linux หากระบบที่ใช้เดเบียนซับซ้อนเกินไป

โปรดทราบว่าฉันมีVim ให้สร้างด้วยการรองรับการโหลดแบบไดนามิกสำหรับทั้งสองดังนั้นการสร้าง Vim จึงไม่ใช่ปัญหา

คำตอบ:


17

ฉันเป็นผู้ดูแล Vim ปัจจุบันสำหรับ Debian และผู้ที่อ้างถึงในการสนทนารายชื่อผู้รับจดหมายอ้างอิง

ตามที่คุณระบุไว้นี่ไม่ใช่คำถามเกี่ยวกับ Vim มันเกี่ยวกับการสร้างซอฟต์แวร์ที่ Vim เชื่อมโยงในลักษณะที่ตรงกับความต้องการของคุณ มีการพูดคุยอย่างละเอียดมากขึ้น (อย่างน้อยก็สำหรับปัญหา Debian) ของปัญหาในข้อผิดพลาดที่ขอให้เปิดใช้งาน Python3ในบรรจุภัณฑ์ Vim ของ Debian

สิ่งนี้จะเดือดลงไป

  • แพ็คเกจ Python ของ Debian ไม่ได้เชื่อมโยงส่วนขยาย Python กับไลบรารีที่ใช้ร่วมกันของ libpython ที่เกี่ยวข้อง นี่คือสิ่งที่ทำให้บรรจุภัณฑ์ Vim ของ Debian จำเป็นต้องใช้RTLD_GLOBALเมื่อใช้dlopen()เพื่อโหลดการผูกภาษา Python แบบไดนามิก

  • ไม่มีวิธีที่ดีในการแสดงความสัมพันธ์ระหว่างแพ็กเกจ Vim และไลบรารีที่โหลดแบบไดนามิกเพื่อให้แน่ใจว่าพวกเขาอัพเกรดด้วยกันเมื่อเหมาะสม แม้ว่าจุดแรกจะได้รับการแก้ไขปัญหานี้จะยังคงป้องกันไม่ให้ฉันเปิดใช้งานการโหลดแบบไดนามิกของการสนับสนุน Python

    จุดหลักของการโหลดการสนับสนุนภาษาใน Vim แบบไดนามิกคือไม่ต้องการให้ผู้ใช้ติดตั้งไลบรารี่ที่พวกเขาจะไม่ใช้ ซึ่งหมายความว่าแพ็คเกจ Vim ไม่สามารถระบุการขึ้นต่อกันอย่างหนักของไลบรารี่ขั้นต่ำ

    ดังนั้นหาก Vim ถูกสร้างขึ้นกับไลบรารี่รุ่นใหม่ที่ไม่สามารถใช้งานร่วมกับเวอร์ชั่นเก่ากว่าและผู้ใช้ไม่ได้อัพเกรดพวกมันด้วยกัน Vim จะทำงานล้มเหลว นี่ไม่ใช่สิ่งที่ฉันต้องการให้ผู้ใช้แพ็คเกจพบ

ฉันชอบที่จะสามารถเปิดใช้งานได้อีกครั้ง (พร้อมใช้งานในช่วงเวลาสั้น ๆ ในปี 2010-2011) การโหลดภาษาแบบไดนามิกของการสนับสนุนภาษา แต่ปัญหาข้างต้นต้องได้รับการแก้ไขก่อน


ตั้งแต่เวอร์ชัน2: 7.4.2330-1บรรจุภัณฑ์ของ Debian ได้เปลี่ยนไปใช้ Python3 แทน Python2 สำหรับการผูก Python


อีกทางเลือกหนึ่งแพคเกจ neovim รองรับการใช้ทั้ง Python2 และ Python3 จากกระบวนการ nvim เดียวกันเนื่องจากการสนับสนุน Python มีให้โดยโมดูลภายนอก ( แพคเกจpython-neovimและpython3-neovim ) การส่งรหัส Python ออกจากภายนอกแทนที่จะฝังไว้อย่าง Vim จะช่วยหลีกเลี่ยงปัญหาในการจัดการกับวิธีการสร้าง libpython


"นี่หมายความว่าแพ็คเกจ Vim ไม่สามารถระบุการขึ้นต่อกันอย่างหนักของไลบรารี่ขั้นต่ำได้" ฉันคิดว่านั่นเป็นสาเหตุที่ Debian ไม่มีแพ็คเกจแยกต่างหากสำหรับ Vim + Python2 และ Vim + Python3 ตามที่ Arch Linux มี
muru

@muru Python เป็นเพียงหนึ่งในการผูกภาษาที่มีอยู่ การนำเสนอแพคเกจรวมกันสำหรับภาษาที่แตกต่างกันและชุดเครื่องมือ GUI เป็นแพ็คเกจจำนวนมาก การตัดสินใจที่จะเปิดใช้งานการผูกภาษาให้มากที่สุดเท่าที่เป็นไปได้และให้ทางเลือกเป็นหนึ่งในชุดเครื่องมือ GUI (หรือไม่) ผู้ใช้ไม่ควรเลือกปลั๊กอินเป็นกลุ่มตามภาษาที่ใช้เขียน
jamessan

นั่นไม่ใช่ข้อโต้แย้งที่แท้จริงเนื่องจากมีเพียง Python และ Python3 เท่านั้นที่ขัดแย้งกัน ฉันคิดว่าคุณควรยืมใบจากนักพัฒนา Arch นอกเหนือจากการร่วมกันvim-runtimeแพคเกจที่พวกเขามีvim, gvim, และvim-python3 gvim-python3ความแตกต่างเพียงอย่างเดียวระหว่าง-python3แพ็คเกจปกติกับรุ่นของ Python ที่เปิดใช้งานอยู่ แน่นอนว่ามันเพิ่มจำนวนของแพ็คเกจส่วนหน้า แต่นั่นคือข้อบกพร่องทั้งหมดที่ฉันเห็นในบรรจุภัณฑ์ดังกล่าว
muru

นั่นสำหรับ Arch ในเดมีvim-nox, vim-gtk, และvim-gnome vim-athenaเพิ่มผู้ใช้เป็นสองเท่าเพื่อให้ผู้ใช้ยังคงไม่สามารถใช้ทั้งปลั๊กอิน Python และ Python3 ดูไม่คุ้มค่า
jamessan

ฉันสงสัยเล็กน้อยว่าทำไมคุณถึงไม่เลือกตัวเลือกแบบไดนามิกสำหรับแพ็คเกจปกติ
muru

4

Ubuntu 16.04 ตอนนี้มี vim-*-py2แพ็คเกจที่รวมอยู่ใน repo ซึ่งหมายความว่าผู้ใช้ Debian Vim สามารถโยกย้ายไปยัง Ubuntu ได้ถ้าต้องการ

vim-*แพคเกจก่อนหน้านี้ให้+python3และไบนารีชื่อแตกต่างกันเพื่อหลีกเลี่ยงความขัดแย้ง:

  • vim.noxสำหรับvim-noxและ+python3
  • vim.nox-py2สำหรับvim-nox-py2และ+python

และอื่น ๆ


ดังนั้นในวันที่ 16.04 ฉันสามารถโหลด python2 และ python3 ในเซสชัน Vim เดียวกันได้หรือไม่
muru

@muru ไม่มีคุณก็สามารถเลือกที่หนึ่งที่คุณได้รับในเซสชั่นที่กำหนดได้ง่ายขึ้น;)
ฮอบส์

@ ฮอบส์ฉันค่อนข้างมั่นใจว่าแพคเกจที่ขัดแย้งกับงูหลาม 3
muru

@muru พวกเขาทำไม่ได้ในความเป็นจริง คุณสามารถมีทั้งการติดตั้งและเรียกใช้สิ่งที่คุณเลือกเช่นเดียวกับการเลือกที่จะเป็นกลุ่มเริ่มต้นของคุณ มันไม่ดี แต่เป็นการปรับปรุง
ฮอบส์

2
และตอนนี้ด้วย 17.04, การสนับสนุน Python 2 และแพ็คเกจ Vim ที่เกี่ยวข้องได้ลดลงแล้ว
muru
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.