Wednesday, May 2, 2018

Python dbg

import pdb
pdb.set_trace()

Emacs ELPY config

Create a virtualenv with the ELPY dependencies

mkvirtualenv -p python3 kafka

workon kafka pip install flask kafka opencv-python

For an ELPY Emacs init.el see


Start Emacs

 M-x elpy-config

Read the instructions in the ELPY config window about which Python packages to install using your virtualenv.

 Install the Jedi server M-x jedi:install-server

Updated ELPY emacs installation and general emacs config


mkvirtualenv -p /Users//anaconda3/bin/python3 elpy pip install rope_py3k rope jedi flake8 ~/.emacs.init.el ;; global variables (setq inhibit-startup-screen t create-lockfiles nil make-backup-files nil column-number-mode t scroll-error-top-bottom t show-paren-delay 0.5 use-package-always-ensure t sentence-end-double-space nil) ;; buffer local variables (setq-default indent-tabs-mode nil tab-width 2 c-basic-offset 2) ;; modes (electric-indent-mode 0) ;; global keybindings (global-unset-key (kbd "C-z")) ;; load key bindings (load "~/.emacs.d/key-bindings.el") ;; the package manager (require 'package) (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/") ("org" . "http://orgmode.org/elpa/") ;("melpa" . "http://melpa.org/packages/") ("melpa-stable" . "http://stable.melpa.org/packages/")) package-archive-priorities '(("melpa-stable" . 1))) (package-initialize) (when (not package-archive-contents) (package-refresh-contents) (package-install 'use-package)) (require 'use-package) (use-package scala-mode :interpreter ("scala" . scala-mode)) (unless (package-installed-p 'virtualenvwrapper) (package-refresh-contents) (package-install 'virtualenvwrapper)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Google Protobuf ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (unless (package-installed-p 'protobuf-mode) (package-refresh-contents) (package-install 'protobuf-mode)) (use-package protobuf-mode :ensure protobuf-mode :interpreter ("protobuf" . protobuf-mode)) (defconst my-protobuf-style '((c-basic-offset . 2) (indent-tabs-mode . nil))) (add-hook 'protobuf-mode-hook (lambda () (c-add-style "my-style" my-protobuf-style t))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; For SBT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-to-list 'exec-path "/usr/local/bin") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Scala ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (unless (package-installed-p 'scala-mode) (package-refresh-contents) (package-install 'scala-mode)) (use-package scala-mode :interpreter ("scala" . scala-mode)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Ensime ;; http://ensime.github.io/editors/emacs/install/ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;(unless (package-installed-p 'ensime) ;(package-refresh-contents) (package-install 'ensime)) (use-package ensime :ensure t :pin melpa-stable) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Install Theme ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (use-package dracula-theme :ensure t :pin melpa-stable) (load-theme 'dracula t) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Packages ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defvar myPackages '(better-defaults elpy jedi flycheck material-theme py-autopep8)) ;; add the autopep8 package ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Install packages ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (mapc #'(lambda (package) (unless (package-installed-p package) (package-install package))) myPackages) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Elpy ;; https://github.com/jorgenschaefer/elpy/wiki/Configuration ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (unless (package-installed-p 'elpy) (package-refresh-contents) (package-install 'elpy)) (use-package elpy :interpreter ("elpy" . elpy)) (when (require 'elpy nil t) (elpy-enable)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Elpy ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Python side ;; For syntax checking, you need the flake8 tool: ;; ;; pip install flake8 ;; For auto-completion features you need to decide on whether you want to use 'rope' or 'jedi', and install either one: ;; (installation of jedi is preferred based on this issue) ;; ;; pip install jedi ;; or if you are using Python 2.x and have reasons to prefer rope ;; ;; pip install rope ;; If you are using Python 3 and want to use Rope, install the rope_py3k package, not rope. ;; ;; pip install rope_py3k ;; ;; mkvirtualenv -p /Users//anaconda3/bin/python3 elpy ;; workon elpy ;; pip install rope_py3k rope jedi flake8 (package-initialize) (elpy-enable) (setq elpy-rpc-backend "jedi") (setq gud-pdb-command-name "python -m pdb") ;; M-x pdb ;; http://programmingmatrix.blogspot.com/2017/09/emacs-installing-jedi.html (require 'pyvenv) (pyvenv-activate "~/python_venv/elpy/") (venv-initialize-interactive-shells) ;; if you want interactive shell support (venv-initialize-eshell) ;; if you want eshell support ;; note that setting `venv-location` is not necessary if you ;; use the default location (`~/.virtualenvs`), or if the ;; the environment variable `WORKON_HOME` points to the right place (setq venv-location "~/python_venv") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; elpy Company code completion ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq company-minimum-prefix-length 1) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Python ;; minimal example to setup Jedi.el via package.el + MELPA: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Standard package.el + MELPA setup ;; (See also: https://github.com/milkypostman/melpa#usage) (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t) (package-initialize) ;; Standard Jedi.el setting (add-hook 'python-mode-hook 'jedi:setup) (setq jedi:complete-on-dot t) ;; Type: ;; M-x package-install RET jedi RET ;; M-x jedi:install-server RET ;; Then open Python file. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Flycheck - Python syntax checking ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (when (require 'flycheck nil t) (setq elpy-modules (delq 'elpy-module-flymake elpy-modules)) (add-hook 'elpy-mode-hook 'flycheck-mode)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; PEP8 - Python Lint ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'py-autopep8) (add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Python settings ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;(add-hook 'python-mode-hook ;; (lambda () ;; (setq-default indent-tabs-mode t) ;; (setq-default tab-width 2) ;; (setq-default py-indent-tabs-mode t) ;; (add-to-list 'write-file-functions 'delete-trailing-whitespace))) (eval-after-load "python" `(progn (add-hook 'python-mode-hook #'(lambda () (setq tab-width 2) (setq python-indent-offset 2) (setq python-indent-guess-indent-offset nil))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; (require 'command-log-mode) ;; (add-hook 'LaTeX-mode-hook 'command-log-mode) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ctags ;; Run "M-x create-tags" to create the TAGS file ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq path-to-ctags "/usr/bin/ctags") (setq tags-table-list '("")) (defun create-tags (dir-name) "Create tags file." (interactive "DDirectory: ") (shell-command (format "%s -f TAGS -e -R %s" path-to-ctags (directory-file-name dir-name))) ) ;;(setq tags-file-name "") (put 'upcase-region 'disabled nil) (put 'downcase-region 'disabled nil) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Custom ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(package-selected-packages (quote (exec-path-from-shell exec-path-from-shell-initialize virtualenvwrapper command-log-mode jedi-direx protobuf-mode ensime scala-mode use-package)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. ) (put 'downcase-region 'disabled nil) (put 'upcase-region 'disabled nil) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; exec-path-from-shell-initialize ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (use-package exec-path-from-shell :ensure t :pin melpa-stable) ;; https://github.com/purcell/exec-path-from-shell (when (memq window-system '(mac ns x)) (exec-path-from-shell-initialize))

Mac OSX virtualenv instructions

http://roundhere.net/journal/virtualenv-ubuntu-12-10/ Install pip sudo apt-get install python-pip Install virtualenv sudo pip install virtualenv Create a dir to store your virtualenvs (I use ~/.virtualenvs) mkdir ~/.virtualenvs At this point you are all set to use virtualenv with the standard commands. However, I prefer to use the extra commands included in virtualenvwrapper. Lets set that up. Install virtualenvwrapper sudo pip install virtualenvwrapper Set WORKON_HOME to your virtualenv dir export WORKON_HOME=~/.virtualenvs Add virtualenvwrapper.sh to .bashrc ○ → which virtualenvwrapper.sh /Users//anaconda3/bin/virtualenvwrapper.sh Add this line to the end of ~/.bashrc so that the virtualenvwrapper commands are loaded. . /Users//anaconda3/bin/virtualenvwrapper.sh Exit and re-open your shell, or reload .bashrc with the command . .bashrc and you’re ready to go. Create a new virtualenv mkvirtualenv myawesomeproject to exit your new virtualenv, use deactivate. Switch between enviornments with workon To load or switch between virtualenvs, use the workon command: workon myawesomeproject You can read more about virtualenv here and virtualenvwrapper here. You might also want to look at this very similar (and probably better) python guide post.