web-dev-qa-db-fra.com

Basculer la version Python pour Vim et Syntastic

Est-il possible de changer la version de python utilisée par syntastic pour la vérification de syntaxe?

Comme le problème https://github.com/scrooloose/syntastic/issues/385 indique que je pourrais utiliser virtual-env. Mais est-ce également possible uniquement avec les commandes syntastic ou vim?

27
mjb4

Ce qui suit n’est plus nécessaire et risque d’être gâché si vous êtes obligé de travailler sur un script strictement python 2.x.

La meilleure option consiste à laisser les valeurs par défaut de Syntastic seules et à utiliser conda pour gérer des environnements distincts pour Python 3 et 2 (chacun avec ses propres installations de flake8, pyflakes, etc., spécifiques à la version), et de passer à la environnement approprié pour éditer chaque fichier. Syntastic appellera alors python/flake8/le reste en fonction des chemins définis dans l’environnement activé.


Depuis le répertoire Syntastic README :

Q. Le vérificateur Python se plaint des constructions Python 3 à syntaxe valide ...

A. Configurez le vérificateur Python pour appeler un interpréteur Python 3 plutôt que Python 2, par exemple:

let g:syntastic_python_python_exec = '/path/to/python3'

Ajoutez cette ligne à votre fichier .vimrc - cela devrait régler votre problème.

19
naught101

Malgré toutes les réponses fournies, je trouve toujours que la recommandation de la FAQ est la meilleure. J'ai ajouté ceci à mon .vimrc afin de pouvoir facilement basculer entre les versions 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

Avec ces fonctions installées, il est facile de changer de version de python directement dans vim avec :call Py2() ou :call Py3() en fonction de mes besoins actuels. Nul besoin de quitter vim et d’activer un serveur virtuel différent comme le voudrait la réponse populaire.

10
Bruno Bronosky

J'ai réussi à convaincre Syntastic de gérer la syntaxe Python 3 avec

pip3 install --user flake8

(pour faire fonctionner python3 -m flake8 *.py) puis dans vim:

let g:syntastic_python_flake8_exec = 'python3'
let g:syntastic_python_flake8_args = ['-m', 'flake8']
7
Marius Gedminas

Considérant que cette question est le premier résultat qui apparaît lors de la recherche sur Google de " Syntastic python3 ", j'ai l'impression que la plupart des réponses sont trop compliquées pour quelqu'un pressé et je me sens obligé d'en ajouter une nouvelle. La solution simple pour passer à python3 est de mettre

let g:syntastic_python_checkers = ['python3']

dans votre .vimrc. On pourrait soutenir que ce n’est pas la meilleure solution, mais la question est si vague qu’il semble nécessaire de commencer par des choses simples.

5
Raphael D.

Pas vraiment, mais vous pouvez obtenir l'avertissement incompatible python3 par install ce paquet .

Disons que votre vérificateur Syntastic Python actuel est python et que vous souhaitez obtenir un avertissement incompatible python3. En mode commande, vous pouvez ajouter py3kwarn à g:syntastic_python_checkers en

:let g:syntastic_python_checkers=['python', 'py3kwarn']

et passez à python2.x uniquement

:let g:syntastic_python_checkers=['python']
3
attomos

Si vous travaillez sous virtualenv, vous pouvez utiliser un script qui détecte la version actuelle de python et appelle flake8 en conséquence. Mettez le texte suivant quelque part dans votre chemin et le nom est flake8.sh:

#!/bin/sh
PYMAJOR=$(python --version | awk '{print $2}'| awk -F. '{print $1}')
exec /usr/bin/python$PYMAJOR /usr/bin/flake8 $*

Maintenant en vous vimrc ajouter:

let g:syntastic_python_flake8_exe='flake8.sh'

Assurez-vous également que python-flake8 et python3-flake8 (sur Ubuntu) sont installés.

2
Zaar Hai

Seulement j'ai fait pour résoudre ce problème à faire:

  let g:syntastic_python_flake8_exec = '/path/to/python3'

Pour vous assurer que flake8 est synchronisé avec la syntaxe de Python3 . Même lorsque je suis dans un environnement virtuel, cela fonctionne.

1
Luis Villavicencio

Juste pour itérer un peu sur le script de Zaar Hai , quelque chose comme ça devrait fonctionner et être un peu plus robuste.

#!/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
0
jhrr