pythonemacsvirtualenvflycheck

How can I make flycheck use virtualenv


I have just happily configured emacs with autocompletion via jedi and syntax check via flycheck and virtualenvs created within bootstrap. It all seems to work.

I'd like to add the ability to use flycheck-pylint (to get errors in import) but I'm not able to make it work. Even if I change the virtualenv by hand (M-x: pyvenv-activate RET path-to-my-venv) I still see lots of import errors that come from a wrong virtualenv used.

My current initialization code:

(require 'pyvenv)
(add-hook 'after-init-hook #'global-flycheck-mode)
(defun set-flake8-executable ()
  (pyvenv-activate (get-current-buffer-venv))
  (flycheck-set-checker-executable (quote python-flake8)
               (get-current-buffer-flake8)))

where "get-current-buffer-venv" and "get-current-buffer-flake8" are functions that implement my specific setup and are working correctly.

How can I change the interpreter used?


Solution

  • Thanks to an answer from Lunaryorn on github i realized there is also a flycheck-set-pylint-executable. Now all is working correctly whith the following configuration:

    (defun set-flychecker-executables ()
      "Configure virtualenv for flake8 and lint."
      (when (get-current-buffer-flake8)
        (flycheck-set-checker-executable (quote python-flake8)
                                         (get-current-buffer-flake8)))
      (when (get-current-buffer-pylint)
        (flycheck-set-checker-executable (quote python-pylint)
                                         (get-current-buffer-pylint))))
    (add-hook 'flycheck-before-syntax-check-hook
              #'set-flychecker-executables 'local)