使用特定版本的Python编译vim

时间:2011-05-03 15:44:01

标签: python vim

我正在研究几个在不同版本的Python上运行的Python项目。我希望设置我的vim环境以使用ropevim,pyflakes和pylint,但是我遇到了一些问题,这些问题是由于使用单个vim(为特定版本的Python编译而与项目的Python版本不匹配)

我希望将vim构建到我的每个virtualenv目录中,但我遇到了一个问题,我无法让它工作。当我尝试从源代码构建vim时,尽管在virtualenv中指定了Python配置文件夹,但总是使用系统范围的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。有没有办法为vim指定Python解释器?

注意:我可以确认/ virtualenv / project / bin出现在PATH环境变量的前面。

5 个答案:

答案 0 :(得分:13)

我建议对2个解释器构建vim,然后使用我在下面提供的shell脚本调用它,将其指向特定的virtualenv。

我能够使用以下命令在Python 2.7上构建vim(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很可能是针对您的系统python编译的,因此您无需为每个virtualenv重建vim:您只需删除名为{{1}的shell脚本在你的virtualenv的bin目录中,它在调用系统vim之前扩展了PYTHONPATH:

vim的内容:

~/HOME/foobar/bin/vim

当调用它时,将插入virtualenv的sys.path:

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

答案 1 :(得分:11)

对于它的价值而言,似乎没有人在这里回答过这个问题,我有一些运气使用如下命令行:

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

答案 2 :(得分:5)

我想给出一个对我来说非常好的人群的类似解决方案。

想象一下,你在/opt/Python-2.7.5中安装了Python,并且该文件夹的结构是

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

并且您希望使用该版本的Python构建vim。您需要做的就是

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

因此,只需将vi_cv_path_python变量明确地赋予configure,脚本就会推断出它自己的所有内容(甚至是配置目录)。

这在vim 7.4+上进行了多次测试,最近在vim-7-4-324进行了测试。

答案 3 :(得分:1)

我的系统上有3个不同版本的python存在同样的问题。

对我来说最简单的事情就是更改我的$PATH env变量,以便在另一个变量之前找到具有我想要的python版本的文件夹(在我的情况下是/usr/local/bin)。

答案 4 :(得分:0)

在我编译vim80的时候,系统python是2.6,我在〜/ local / bin下面有另一个python 2.7,我发现,为了编译工作:

  1. 更新$ PATH以提前放置我的python路径
  2. 添加一个软链接 ln -s python python2 (配置文件会尝试通过探测 python2 来定位python配置)
  3. make distclean ,然后重新运行./configure以确保没有选择缓存的错误值。