|
|
|
;;; python-mode-settings.el --- Defines mode settings for python.
|
|
|
|
;;;
|
|
|
|
;;; Commentary:
|
|
|
|
;;;
|
|
|
|
;;;
|
|
|
|
;;; - For each project you will need to install flake8/autopep8 into the virtualenv
|
|
|
|
;;; - For each project you will need to install jedi into the virtualenv
|
|
|
|
;;; - To set your pyenv use M-x pyenv-mode and select your local virtualenv
|
|
|
|
|
|
|
|
|
|
|
|
;; thx rakan.me
|
|
|
|
(defun pyenv-activate-current-project ()
|
|
|
|
"Automatically activates pyenv version if .python-version file exists."
|
|
|
|
(interactive)
|
|
|
|
(f-traverse-upwards
|
|
|
|
(lambda (path)
|
|
|
|
(message path)
|
|
|
|
(let ((pyenv-version-path (f-expand ".python-version" path)))
|
|
|
|
(if (f-exists? pyenv-version-path)
|
|
|
|
(let ((pyenv-current-version (s-trim (f-read-text pyenv-version-path 'utf-8))))
|
|
|
|
(pyenv-mode-set pyenv-current-version)
|
|
|
|
(message (concat "Setting virtualenv to " pyenv-current-version))))))))
|
|
|
|
|
|
|
|
;; For Python enable Elpy.
|
|
|
|
(use-package elpy
|
|
|
|
:ensure t
|
|
|
|
:init (elpy-enable))
|
|
|
|
|
|
|
|
(setq elpy-rpc-backend "jedi")
|
|
|
|
(setq jedi:complete-on-dot t)
|
|
|
|
|
|
|
|
;; Enable pyenv integration.
|
|
|
|
(if (executable-find "pyenv")
|
|
|
|
(use-package pyenv-mode
|
|
|
|
:config
|
|
|
|
(pyenv-mode)))
|
|
|
|
|
|
|
|
;; Disable elpy default virtualenv (use the pyenv one)
|
|
|
|
(setq elpy-rpc-virtualenv-path 'current)
|
|
|
|
|
|
|
|
;; Enable autopep8
|
|
|
|
|
|
|
|
(require 'py-autopep8)
|
|
|
|
|
|
|
|
(add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save)
|
|
|
|
|
|
|
|
;; Enable flake8 - requires flake8 in your path so use pyenv/global pip install
|
|
|
|
(add-hook 'python-mode-hook '(lambda ()
|
|
|
|
(setq flycheck-python-flake8-executable "flake8")
|
|
|
|
(flycheck-select-checker 'python-flake8)
|
|
|
|
(flycheck-mode t)))
|
|
|
|
|
|
|
|
;; Activate pyenv automatically if a .python-version is supplied
|
|
|
|
(if (executable-find "pyenv")
|
|
|
|
(add-hook 'python-mode-hook 'pyenv-activate-current-project))
|
|
|
|
|
|
|
|
;; Add company-jedi hook to python mode
|
|
|
|
(add-hook 'python-mode-hook (lambda ()
|
|
|
|
(add-to-list 'company-backends 'company-jedi)))
|
|
|
|
|
|
|
|
|
|
|
|
;; Use microsoft's python language server
|
|
|
|
(add-hook 'python-mode-hook (lambda () (lsp-python-enable)))
|
|
|
|
(require 'lsp-python-ms)
|
|
|
|
(use-package lsp-python-ms
|
|
|
|
:ensure t
|
|
|
|
:init (setq lsp-python-ms-auto-install-server t)
|
|
|
|
:hook (python-mode . (lambda ()
|
|
|
|
(require 'lsp-python-ms)
|
|
|
|
(lsp)))) ; or lsp-deferred
|
|
|
|
|
|
|
|
;; Python testing helpers
|
|
|
|
(use-package python-pytest)
|