Подтвердить что ты не робот

Компиляция vim с конкретной версией Python

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

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

В настоящее время у меня установлены Python 2.6.2 и Python 2.7.1 с несколькими виртуальными файлами, созданными из каждой версии. Я использую 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.

4b9b3361

Ответ 1

Я бы рекомендовал создать vim против двух интерпретаторов, а затем вызвать его с помощью оболочки script, представленной ниже, чтобы указать ее на конкретный 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 покажет виртуальный путь:

% 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 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 скорее всего скомпилирована против вашего системного python, вам не нужно перестраивать vim для каждого virtualenv: вы можете просто отказаться от оболочки script с именем vim в вашем каталоге virtualenv bin, который расширяет 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:

% $HOME/foobar/bin/vim
:python import sys; print sys.path[:2]
['/home/pat/foobar/lib/python2.6/site-packages', '/usr/lib/python2.6']

Ответ 2

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

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

Ответ 3

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

Представьте, что 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, script выведет все на нее (даже config-dir).

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

Ответ 4

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

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

Ответ 5

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

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