Компиляция vim с определенной версией Python - PullRequest
25 голосов
/ 03 мая 2011

Я работаю над несколькими проектами Python, которые работают на различных версиях Python. Я надеюсь настроить мою среду vim на использование Ropevim, Pyflakes и Pylint, но я столкнулся с некоторыми проблемами, вызванными использованием одного vim (скомпилированного для конкретной версии Python, которая не соответствует версии Python проекта) .

Я надеюсь встроить vim в каждый из моих каталогов virtualenv, но я столкнулся с проблемой и не могу заставить ее работать. Когда я пытаюсь собрать vim из исходного кода, несмотря на указание папки конфигурации Python в моем virtualenv, всегда используется общесистемный интерпретатор Python.

В настоящее время у меня установлены Python 2.6.2 и Python 2.7.1 с несколькими virtualenv, созданными из каждой версии. Я использую Ubuntu 10.04, где системный Python по умолчанию - 2.6.5. Каждый раз, когда я компилирую vim и вызываю :python import sys; print(sys.version), он возвращает Python 2.6.5.

configure --prefix=/virtualenv/project --enable-pythoninterp=yes --with-python-config-dir=/virtualenv/project/lib/python2.6/config

Результат в config.log:

...
configure:5151: checking --enable-pythoninterp argument
configure:5160: result: yes
configure:5165: checking for python
configure:5195: result: /usr/bin/python
...

Это должно быть /virtualenv/project/bin/python. Есть ли способ указать интерпретатор Python для использования vim?

ПРИМЕЧАНИЕ. Я могу подтвердить, что / virtualenv / project / bin отображается в начале переменной окружения PATH.

Ответы [ 5 ]

13 голосов
/ 03 мая 2011

Я бы порекомендовал собрать vim для двух интерпретаторов, а затем вызывать его, используя сценарий оболочки, который я предоставил ниже, чтобы указать на конкретный virtualenv.

Мне удалось собрать vim для Python 2.7 с помощью следующей команды (2.7 устанавливается в $ HOME / root):

% LD_LIBRARY_PATH=$HOME/root/lib PATH=$HOME/root/bin:$PATH \
    ./configure --enable-pythoninterp \ 
    --with-python-config-dir=$HOME/root/lib/python2.7/config \
    --prefix=$HOME/vim27
% make install
% $HOME/bin/vim27

:python import sys; print sys.path[:2]
['/home/pat/root/lib/python27.zip', '/home/pat/root/lib/python2.7']

Ваш virtualenv на самом деле является тонкой оболочкой для интерпретатора Python, с которым он был создан - $HOME/foobar/lib/python2.6/config является символической ссылкой на /usr/lib/python2.6/config.

Так что, если вы создали его с системным интерпретатором, VIM проверит это и в конечном итоге свяжет с реальным интерпретатором, используя систему sys.path по умолчанию, даже если configure покажет путь virtualenv:

% PATH=$HOME/foobar/bin:$PATH ./configure --enable-pythoninterp \
    --with-python-config-dir=$HOME/foobar/lib/python2.6/config \
    --prefix=$HOME/foobar
..
checking for python... /home/pat/foobar/bin/python
checking Python's configuration directory... (cached) /home/pat/foobar/lib/python2.6/config
..

% make install
% $HOME/foobar/bin/vim
:python import sys; print sys.path[:1]
['/usr/lib/python2.6']

Обходной путь : поскольку ваш системный vim, скорее всего, скомпилирован с вашим системным питоном, вам не нужно перестраивать vim для каждого virtualenv: вы можете просто удалить скрипт оболочки с именем vim в своем Каталог bin для virtualenv, который расширяет PYTHONPATH перед вызовом системы vim:

Содержимое ~/HOME/foobar/bin/vim:

#!/bin/sh
ROOT=`cd \`dirname $0\`; cd ..; pwd`
PYTHONPATH=$ROOT/lib/python2.6/site-packages /usr/bin/vim $*

Когда это вызывается, вставляется sys.path virtualenv:

% $HOME/foobar/bin/vim
:python import sys; print sys.path[:2]
['/home/pat/foobar/lib/python2.6/site-packages', '/usr/lib/python2.6']
11 голосов
/ 16 апреля 2014

Для чего это стоит, и, кажется, никто не ответил на это здесь, мне повезло, используя командную строку, как показано ниже:

vi_cv_path_python=/usr/bin/python26 ./configure --includedir=/usr/include/python2.6/  --prefix=/home/bcrowder/local --with-features=huge --enable-rubyinterp --enable-pythoninterp --disable-selinux --with-python-config-dir=/usr/lib64/python2.6/config
5 голосов
/ 02 сентября 2014

Я хотел бы дать аналогичное решение для Crowder'а, которое вполне мне подходит.

Представьте, что у вас установлен Python в /opt/Python-2.7.5 и структура этой папки

$ tree -d -L 1 /opt/Python-2.7.5/
/opt/Python-2.7.5/
├── bin
├── include
├── lib
└── share

и вы хотели бы собрать vim с этой версией Python.Все, что вам нужно сделать, это

$ vi_cv_path_python=/opt/Python-2.7.5/bin/python ./configure  --enable-pythoninterp --prefix=/SOME/FOLDER

Таким образом, просто явно указав vi_cv_path_python переменную configure, скрипт будет выводить все самостоятельно (даже config-dir).

Это было проверено несколько раз на vim 7.4+ и в последнее время с vim-7-4-324.

1 голос
/ 01 ноября 2012

У меня была такая же проблема с 3 разными версиями python в моей системе.

для меня проще всего было изменить мою переменную $PATH env так, чтобы папка с версией Python IРазыскиваемый был (в моем случае /usr/local/bin) был найден раньше другого.

0 голосов
/ 05 февраля 2018

Во время моей компиляции vim80 системный python равен 2.6, у меня есть другой python 2.7 в ~ / local / bin, я считаю, что для того, чтобы компиляция работала:

  1. update $PATH для размещения моего пути Python вперед
  2. добавить мягкую ссылку, ln -s python python2 (файл конфигурации попытается найти конфигурацию Python, проверяя python2 )
  3. сделать distclean перед повторным запуском ./configure, чтобы убедиться, что не выбрано кэшированное неправильное значение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...