Switch Python Version pour Vim & Syntastic

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

le Problème https://github.com/scrooloose/syntastic/issues/385 indique que je pouvais utiliser virtual-env. Mais est-ce aussi possible avec des commandes syntastic ou vim?

24
demandé sur mjb4 2014-04-20 05:51:06

8 réponses

ce qui suit n'est plus nécessaire, et pourrait foirer si vous êtes forcé de travailler sur un Python 2 strictement.x script.

la meilleure option est de laisser les valeurs par défaut Syntastic seules, et d'utiliser conda pour gérer des environnements séparés pour python 3 et 2 (chacun avec ses propres installations de version de flake8, pyflakes, etc), et pour passer à l'environnement approprié pour éditer chaque fichier. Syntastic appellera alors python / flake8 / quoi que ce soit d'autre selon les chemins définis dans l'environnement activé.


Syntastic repository README:

Q. le vérificateur python se plaint de la validité syntaxique des constructions Python 3...

A. configurer le python checker pour appeler un interpréteur Python 3 plutôt que Python 2, e. g:

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

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

17
répondu naught101 2017-02-01 23:14:18

malgré toutes les réponses ici, je trouve toujours que la recommandation de la FAQ est la meilleure. J'ai ajouté à mon .vimrc pour que je puisse 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 la version python directement dans vim avec :call Py2() ou :call Py3() selon ce que j'ai besoin en ce moment. Pas besoin de quitter vim et d'activer un virtualenv différent comme la réponse populaire vous aurait fait.

8
répondu Bruno Bronosky 2017-03-30 18:09:07

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

pip3 install --user flake8

(pour faire

let g:syntastic_python_flake8_exec = 'python3'
let g:syntastic_python_flake8_args = ['-m', 'flake8']
7
répondu Marius Gedminas 2015-11-24 12:06:02

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

disons que votre Python Python checker Syntastic actuel est python et vous souhaitez obtenir python3 avertissement incompatible. En mode commande, vous pouvez ajouter py3kwarng:syntastic_python_checkers par

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

et passer à python2.x

:let g:syntastic_python_checkers=['python']
3
répondu attomos 2014-04-22 05:33:22

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

let g:syntastic_python_checkers = ['python3']

dans votre .vimrc. On pourrait arguer que ce n'est pas la meilleure solution, mais la question est tellement vague que semble nécessaire de commencer avec les choses simples.

3
répondu Raphael D. 2018-07-25 15:21:14

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

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

Maintenant, à vous vimrc ajouter:

let g:syntastic_python_flake8_exe='flake8.sh'

assurez-vous aussi que les deux python-flake8 et python3-flake8 (sur Ubuntu) sont installés.

2
répondu Zaar Hai 2016-04-26 13:09:47

seulement j'ai fait pour corriger cela était de faire:

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

pour s'assurer que flake8 est synchronisé avec la syntaxe de Python3. Même quand je suis dans un virtualenv fonctionne.

1
répondu Luis Villavicencio 2016-11-26 06:41:56

Juste pour itérer sur Zaar Hai's script un peu, quelque chose comme cela doit 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
répondu jhrr 2017-05-23 12:10:41