Компиляция 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
.
Ответы
Ответ 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, я нахожу это, чтобы заставить компиляцию работать:
- обновите $ PATH, чтобы разместить мой путь к Python
- добавить мягкую ссылку ln -s python python2 (файл конфигурации попытается найти конфигурацию python, проверяя python2)
- сделайте distclean перед повторным запуском. /configure, чтобы убедиться, что не выбрано кэшированное неправильное значение.