Vim이 동일한 세션의 Linux 시스템에서 python과 python3을 모두 실행할 수 있도록하려면 어떻게해야합니까?


28

Linux 시스템에서 패키지 Vim은 일반적으로 하나만 활성화 python하거나 python3활성화합니다. 것이 가능하다 모두가 활성화되어야합니다 (사용 python/dyn하고 python3/dyn)하지만, 세션 중에 하나만 사용할 수 있습니다. 이 메일 링리스트 토론은 다음과 같이 말했습니다 :

파이썬 라이브러리가 어떻게 구축되는지에 달려 있습니다. 데비안 기반 시스템에서 (내가 생각 나지 않는 이유로) RTLD_GLOBAL을 사용하여 기호에 액세스해야합니다. 이것은 같은 프로세스에서 libpython2.x와 libpython3.x를 모두로드하지 못하게합니다.

동일한 세션에서 둘 다로드 할 수 있도록하려면 어떻게해야합니까?

내가 볼 수있는 옵션 :

  • Python {2,3} 패키지를 다시 빌드하여 RTLD_GLOBAL(필요한 것이 무엇이든) 필요하지 않게하십시오.
  • 어떻게 든 Vim에 의해 라이브러리가 언로드 (?!)되도록 일찍로드됩니다. (그것도 가능합니까?)

배포판의 특정 사항에 대해서는 특이성의 순서대로 증가한다고 가정하십시오.

  • 데비안 기반
  • 우분투
  • 우분투 14.04
  • 또는 데비안 기반 시스템이 너무 복잡한 경우 아치 리눅스.

나는 것을 참고 빌드로 빔을 가지고 빔을 구축하는 것은 문제가되지 않습니다, 그래서 모두 동적 로딩 지원.

답변:


17

저는 데비안의 현재 Vim 관리자이며 참조 된 메일 링리스트에서 인용 된 사람입니다.

언급했듯이 이것은 Vim에 대한 질문이 아닙니다. Vim이 귀하의 요구를 충족시키는 방식으로 링크하는 소프트웨어를 구축하는 것입니다. 데비안의 Vim 패키징에서 Python3를 사용하도록 요청 하는 버그 에서이 문제에 대해 더 철저한 토론이 있습니다 (적어도 데비안 측면에서는) .

이것은 아래로 비등합니다

  • 데비안의 파이썬 패키징은 파이썬 확장을 관련 libpython 공유 라이브러리와 연결하지 않습니다. 이것이 파이썬 언어 바인딩을 동적으로로드 RTLD_GLOBAL할 때 데비안의 Vim 패키징을 사용해야하는 이유 dlopen()입니다.

  • Vim 패키지와 동적으로로드 된 라이브러리 간의 관계를 표현하여 적절한 경우 함께 업그레이드되도록하는 좋은 방법은 없습니다. 첫 번째 포인트가 해결되었지만이 문제로 인해 Python 지원을 동적으로로드 할 수 없습니다.

    Vim에서 언어 지원을 동적으로로드하는 주요 요점은 사용자가 사용하지 않을 라이브러리를 설치하도록 요구하지 않는 것입니다. 이는 Vim 패키징이 라이브러리의 최소 버전에 대한 엄격한 종속성을 지정할 수 없음을 의미합니다.

    따라서 Vim이 이전 버전과 호환되지 않는 최신 버전의 라이브러리에 대해 빌드되고 사용자가 함께 업그레이드하지 않으면 Vim이 충돌합니다. 이것은 패키지 사용자가 만나기를 원하는 것이 아닙니다.

언어 지원의 동적 로딩을 다시 활성화 할 수 있기를 원하지만 (2010-2011 년에 짧은 시간 동안 사용 가능) 위의 문제를 먼저 해결해야합니다.


버전 2 : 7.4.2330-1 부터 Debian의 패키지는 Python 바인딩에 Python2 대신 Python3을 사용하도록 전환되었습니다.


대안으로, neovim 패키지는 외부 모듈 ( python-neovimpython3-neovim 패키지)에 의해 제공되므로 동일한 nvim 프로세스에서 Python2 및 Python3의 사용을 지원합니다 . Vim과 같이 Python 코드를 포함시키지 않고 파이썬 코드를 외부화하면 libpython의 빌드 방법을 다루는 문제를 피할 수 있습니다.


"이것은 Vim 패키징이 라이브러리의 최소 버전에 대한 의존성을 지정할 수 없다는 것을 의미합니다." 이것이 왜 데비안이 아치 리눅스처럼 Vim + Python2와 Vim + Python3를위한 별도의 패키지를 가지고 있지 않다고 생각합니까?
muru

@muru Python은 사용 가능한 언어 바인딩 중 하나 일뿐입니다. 다른 언어 및 GUI 툴킷에 패키지 조합을 제공하는 것은 많은 패키지입니다. 결정은 합리적으로 많은 언어 바인딩을 가능하게하고 GUI 툴킷 중 하나를 선택하도록했습니다. 사용자는 작성된 언어에 따라 Vim 플러그인을 선택할 필요가 없습니다.
jamessan

파이썬과 Python3만이 서로 충돌하기 때문에 이것은 실제 논쟁이 아닙니다. 솔직히 아치 개발자의 책에서 잎을 빌려야한다고 생각합니다. 이외에도 공통의 vim-runtime패키지, 자신이 갖고 vim, gvim, vim-python3gvim-python3. -python3패키지와 일반 패키지 의 유일한 차이점은 활성화 된 Python 버전입니다. 물론, 그것은 프론트 엔드 패키지의 수를 두 배로 늘리지 만, 그러한 패키징에서 볼 수있는 모든 결함입니다.
muru

아치입니다. 데비안에서,있다 vim-nox, vim-gtk, vim-gnome,와 vim-athena. 사용자가 여전히 Python과 Python3 플러그인을 모두 사용할 수 없도록 두배로 늘리는 것은 가치가 없어 보입니다.
jamessan

일반 패키지에 대해 동적 옵션을 선택하지 않은 이유에 대해 약간 궁금합니다.
muru

4

우분투 16.04는 이제 vim-*-py2저장소에 패키지가 포함되어 있습니다. 즉, 필요한 경우 모든 데비안 Vim 사용자가 우분투로 마이그레이션 할 수 있습니다.

이전 vim-*패키지는 이제를 제공 +python3하고 바이너리는 충돌을 피하기 위해 다르게 이름이 지정됩니다.

등등.


따라서 16.04에서 동일한 Vim 세션에서 python2와 python3을로드 할 수 있습니까?
muru

@muru 아니, 당신은 당신이 주어진 세션에서 더 쉽게 하나를 선택할 수 있습니다;)
hobbs

@ hobbs 패키지가 python3 패키지와 충돌한다고 확신합니다.
muru

@muru 그들은 실제로하지 않습니다. 원하는 것을 설치하고 실행할 수 있으며 기본 vim으로 선택할 수도 있습니다. 좋지는 않지만 개선되었습니다.
hobbs

2
이제 17.04부터 Python 2 지원 및 관련 Vim 패키지가 제거되었습니다
muru
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.