2011-05-03 111 views
23

我工作的具体版本。我希望设置我的vim环境来使用ropevim,pyflakes和pylint,但是我遇到了一些由于使用单个vim而导致的问题(针对与项目的Python版本不匹配的特定版本的Python编译) 。编译VIM与谁有关Python的各种版本运行几个Python项目的Python

我希望能打造VIM到每一个我的virtualenv目录,但我碰到的一个问题,我无法得到它的工作。当我尝试从源代码构建vim时,尽管在我的virtualenv中指定了Python配置文件夹,但总是使用系统范围的Python解释器。

目前,我的Python 2.6.2,并与每个版本创建了几个virtualenvs安装了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。有什么方法可以指定vim使用的Python解释器吗?

注:我可以证实,/ virtualenv中/工程/斌出现在PATH环境变量的前面。

回答

13

我建议建立VIM对2名口译,然后用我下面提供的shell脚本,它指向一个特定的virtualenv调用它。

我可以使用下面的命令(2.7在$ HOME /根装)进行建设的Python 2.7 VIM:

% 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,即使配置将显示的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:你能把你的virtualenv的bin目录中名为vim一个shell脚本,这之前延长了PYTHONPATH呼叫系统vim:

内容的~/HOME/foobar/bin/vim

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

当被调用时,virtualenv中的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'] 
+0

我提到我使用多个版本的Python,但我可能应该在原始问题中详细阐述一下。系统Python不是我创建virtualenvs的Python。实际上,我使用Python 2.6.2和Python 2.7.1的virtualenvs,但每次编译vim时,使用的Python解释器都是/ usr/bin/python(Ubuntu 10.04上的Python 2.6.5) – brildum 2011-05-03 17:52:35

+0

您的其他Python版本的安装位置,例如符号链接'/ virtualenv/project/lib/python2.6/config'指向哪里? – samplebias 2011-05-03 18:36:06

+0

事实证明,即使我调用configure时激活了我的virtualenv(因此,当我添加PATH =/virtualenv/project时,'echo $ PATH''会输出''/ virtualenv/project:...''' :$ PATH ...''到命令开始,我能够得到它的工作。感谢您的帮助。 – brildum 2011-05-03 18:41:32

1

我是有我的系统上3个不同版本的Python的同样的问题。

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

+0

单独设置$ PATH不适用于我,我不得不直接使用我在我的答案中列出的vi_cv_path_python调用来直接配置。 – crowder 2014-05-14 18:16:38

9

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

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

+1

这对我有效。我在我的$ HOME中有一个本地构建的Python 2.7前缀,并且vim build似乎拒绝找到它。 – JeffG 2014-10-17 16:13:23

+0

你在哪里建议我们放这个? – 2014-11-08 08:23:15

+0

@AndyHayden:在命令行上,从源代码构建vim? – crowder 2014-12-03 17:19:57

4

我想给一个类似的解决方案,对我来说工作得很好。

假设您已经安装了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脚本将演绎出它自己的(即使是配置-DIR)的一切。

它在vim 7.4+上多次测试,最近在vim-7-4-324上测试过。

+0

谢谢。您的回复帮助我使用python的自定义/专有安装来编译vim。 – 2017-05-22 06:18:07

0

在我的编译vim80,系统蟒蛇是2.6,我有另一个Python 2.7在〜/ local/bin中,我发现,使编制工作:

  1. 更新$ PATH把我的蟒蛇路径前进
  2. 添加软链接,LN -s蟒蛇python2(该配置文件会尝试通过探测python2找到蟒蛇配置)重新-R之前
  3. 使distclean命令取消./configure以确保没有选取缓存的错误值。