Cambia la versión de Python para Vim y Syntastic
python jedi (8)
¿Es posible cambiar la versión de python utilizada por syntastic para la comprobación de la sintaxis?
Como el Issue https://github.com/scrooloose/syntastic/issues/385 indica que podría usar virtual-env. ¿Pero también es posible con comandos sintácticos o vim?
A pesar de todas las respuestas aquí, todavía encuentro la recomendación de las preguntas frecuentes como la mejor. He agregado esto a mi .vimrc
para poder cambiar fácilmente entre las versiones de python.
function Py2()
let g:syntastic_python_python_exec = ''/usr/local/bin/python2.7''
endfunction
function Py3()
let g:syntastic_python_python_exec = ''/usr/local/bin/python3.6''
endfunction
call Py3() " default to Py3 because I try to use it when possible
Con esas funciones instaladas, es fácil cambiar la versión de Python dentro de vim con :call Py2()
o :call Py3()
dependiendo de lo que necesito en este momento. No es necesario salir de vim y activar un virtualenv diferente como lo haría la respuesta popular.
Lo único que hice para arreglar esto fue hacer:
let g:syntastic_python_flake8_exec = ''/path/to/python3''
Para asegurarse de que flake8 esté sincronizado con la sintaxis de Python3. Incluso cuando estoy en un virtualenv funciona.
Lo siguiente ya no es necesario, y podría arruinarlo si se ve obligado a trabajar en un script estrictamente python 2.x.
La mejor opción es dejar los valores predeterminados de Syntastic, y usar conda para administrar entornos separados para python 3 y 2 (cada uno con sus propias instalaciones de flake8, pyflakes, etc.) específicas de la versión, y cambiar al entorno apropiado para editar cada archivo Syntastic llamará a python / flake8 / cualquier otra cosa de acuerdo con las rutas establecidas en el entorno activado.
Desde el repositorio de Syntastic README :
P. El verificador de Python se queja de construcciones sintácticamente válidas de Python 3 ...
A. Configure el verificador de Python para llamar a un intérprete de Python 3 en lugar de Python 2, por ejemplo:
let g:syntastic_python_python_exec = ''/path/to/python3''
Agregue esa línea a su .vimrc - eso debería solucionar su problema.
Logré convencer a Syntastic para manejar la sintaxis de Python 3 con
pip3 install --user flake8
(para hacer que python3 -m flake8 *.py
funcione) y luego, en vim:
let g:syntastic_python_flake8_exec = ''python3''
let g:syntastic_python_flake8_args = [''-m'', ''flake8'']
Realmente no, pero puede obtener la advertencia incompatible con python3
instalando este paquete .
Digamos que su actual comprobador de Python de Syntastic es python
y desea obtener python3
advertencia incompatible con python3
. En el modo de comando, puede agregar py3kwarn
a g:syntastic_python_checkers
por
:let g:syntastic_python_checkers=[''python'']
y cambiar a python2.x
solamente
let g:syntastic_python_checkers = [''python3'']
Si trabaja bajo virtualenv, puede usar un script que detecte la versión actual de python e invoque flake8
consecuencia. Ponga lo siguiente en algún lugar de su ruta y nombre es flake8.sh
:
#!/bin/sh
PYMAJOR=$(python --version | awk ''{print $2}''| awk -F. ''{print $1}'')
exec /usr/bin/python$PYMAJOR /usr/bin/flake8 $*
Ahora en vimrc
agrega:
let g:syntastic_python_flake8_exe=''flake8.sh''
También asegúrese de que tanto python-flake8
como python3-flake8
(en Ubuntu) estén instalados.
Solo para repetir un poco el guión de Zaar Hai , algo como esto debería funcionar y ser un poco más robusto.
#!/usr/bin/env bash
_python=$(command -v python)
[[ "$(uname -s)" =~ Darwin ]] && IS_OSX=true
if [[ "$IS_OSX" ]]; then
if command -v ''greadlink'' >/dev/null 2>&1; then
greadlink -f "$_python"
else
echo ''Install coreutils!'' >&2
fi
else
readlink -f "$_python"
fi
Teniendo en cuenta que esta pregunta es el primer resultado que aparece cuando se busca en Google " Syntastic python3 ", tengo la impresión de que la mayoría de las respuestas son demasiado complicadas para alguien con prisa, y me siento obligado a agregar una nueva. La solución sencilla para cambiar a python3 es poner
:let g:syntastic_python_checkers=[''python'', ''py3kwarn'']
en tu .vimrc
. Se podría argumentar que esta no es la mejor solución, pero la pregunta es tan vaga que parece necesaria para comenzar con cosas simples.