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?
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.
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.
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']
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.
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']
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.
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.
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