2011-05-03 13 views
23

Estoy trabajando en varios proyectos de Python que se ejecutan en varias versiones de Python. Espero configurar mi entorno vim para usar ropevim, pyflakes y pylint, pero me he encontrado con algunos problemas causados ​​por el uso de un solo vim (compilado para una versión específica de Python que no coincide con la versión de Python del proyecto) .Compilación de vim con una versión específica de Python

Espero construir vim en cada uno de mis directorios Virtualenv pero me he encontrado con un problema y no puedo hacer que funcione. Cuando intento compilar vim desde el origen, a pesar de especificar la carpeta de configuración de Python en mi virtualenv, siempre se usa el intérprete de Python para todo el sistema.

Actualmente, tengo Python 2.6.2 y Python 2.7.1 instalados con varios virtualenvs creados a partir de cada versión. Estoy usando Ubuntu 10.04 donde el sistema predeterminado Python es 2.6.5. Cada vez que compilo vim y llamo al :python import sys; print(sys.version), devuelve Python 2.6.5.

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

resultados en las siguientes: en config.log

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

Se deben ser /virtualenv/project/bin/python. ¿Hay alguna forma de especificar el intérprete de Python para vim?

NOTA: Puedo confirmar que/virtualenv/project/bin aparece al frente de la variable de entorno PATH.

Respuesta

13

Recomiendo construir vim contra los 2 intérpretes, y luego invocarlo usando el script de shell que proporcioné a continuación para señalarlo a un virtualenv en particular.

que fue capaz de construir vim contra Python 2.7 utilizando el siguiente comando (2.7 está instalado en $ 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'] 

Su virtualenv es en realidad una envoltura delgada alrededor del intérprete de Python se se creó con - $HOME/foobar/lib/python2.6/config es un enlace simbólico a /usr/lib/python2.6/config.

Así que si lo creó con el intérprete del sistema, Vim investigar para este y en última instancia enlazar con el intérprete real, utilizando el sistema sys.path por defecto, a pesar de que configure mostrará el camino del 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'] 

La solución alternativa: Dado que es muy probable que compile su sistema vim con su sistema python, no necesita reconstruir vim para cada virtualenv: puede simplemente colocar un script de shell llamado vim en el directorio bin de su virtualenv, que amplía PYTHONPATH antes sistema de llamadas vim:

Contenido de ~/HOME/foobar/bin/vim:

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

Cuando se invoca que se inserta sys.path del virtualenv:

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

Mencioné que uso múltiples versiones de Python, aunque probablemente debería haber elaborado un poco más en la pregunta original. El sistema Python no es el Python del que he creado los virtualenvs. De hecho, tengo virtualenvs usando Python 2.6.2 y Python 2.7.1 pero cada vez que compilo vim, el intérprete de python utilizado es/usr/bin/python (Python 2.6.5 en Ubuntu 10.04) – brildum

+0

¿Dónde están instaladas tus otras versiones de Python? , p.ej ¿dónde apunta el enlace simbólico '/ virtualenv/project/lib/python2.6/config'? – samplebias

+0

Resulta que aunque tuve mi virtualenv activada al llamar a configure (y por lo tanto '' echo $ PATH'' daría salida a ''/virtualenv/project: ... '' cuando agregué '' PATH =/virtualenv/project : $ PATH ... '' al comienzo del comando, pude hacerlo funcionar. Gracias por su ayuda. – brildum

1

que estaba teniendo el mismo problema con 3 versiones diferentes de Python en mi sistema.

para mí lo más fácil era cambiar mi variable de entorno $PATH para que la carpeta que tiene la versión de Python que quería era (en mi caso /usr/local/bin) se encontró antes de que otro.

+0

Establecer $ PATH solo no funcionó para mí , Tuve que dirigir la configuración explícitamente usando la invocación vi_cv_path_python que enumeré en mi respuesta. – crowder

9

Por lo que vale la pena, y nadie parece haber respondido a esto aquí, tuve un poco de suerte el uso de una línea de comando como el siguiente:

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

Esto funcionó para mí. Tenía una construcción local de python 2.7 prefijada en mi $ HOME y la versión vim parecía negarse a encontrarla. – JeffG

+0

¿Dónde estás? sugiriendo que pongamos esto? –

+0

@AndyHayden: en la línea de comandos, para construir vim desde la fuente? – crowder

4

Me gustaría dar una solución similar a Crowder's que funciona bastante bien para mí.

Imagine que tiene instalado Python en /opt/Python-2.7.5 y que la estructura de esa carpeta es

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

y que le gustaría construir vim con esa versión de Python. Todo lo que necesita hacer es

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

Por lo tanto, simplemente dando explícitamente vi_cv_path_python variable para configure el guión deducirá todo por sí mismo (incluso el config-dir).

Esto se probó varias veces en vim 7.4+ y últimamente con vim-7-4-324.

+0

Gracias. Su respuesta me ayudó a compilar vim usando una instalación personalizada/patentada de python. –

0

Durante mi compilar vim80, la pitón sistema es de 2,6, tengo otro pitón 2.7 en ~/local/bin, me parece que, para hacer el trabajo de compilación:

  1. actualización $ PATH para poner mi camino por delante pitón
  2. añadir un enlace blando, ln -s pitón python2 (el archivo de configuración intentaría localizar config pitón sondeando python2)
  3. hacen distclean antes de volver a r un ./configure para asegurarse de que no se haya elegido ningún valor incorrecto en la memoria caché.
Cuestiones relacionadas