Simplify the Python programming section
This commit is contained in:
parent
83511c6b4e
commit
26a713a4eb
114
README.org
114
README.org
@ -1155,10 +1155,7 @@ defined in this Org file.
|
|||||||
(org-inactive-current-time-stamp :nomanual t)
|
(org-inactive-current-time-stamp :nomanual t)
|
||||||
(org-syntax-convert-keyword-case-to-lower :no-manual t)
|
(org-syntax-convert-keyword-case-to-lower :no-manual t)
|
||||||
(smart-latex-engrave-org-source-blocks :no-manual t)
|
(smart-latex-engrave-org-source-blocks :no-manual t)
|
||||||
(zero-all-org-src-blocks-indentation :no-manual t)
|
(zero-all-org-src-blocks-indentation :no-manual t))))
|
||||||
"Python"
|
|
||||||
(choose-common-python-interpreter :no-manual t)
|
|
||||||
(choose-common-python-linter :no-manual t))))
|
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
** [[info:info#Top][Info (info)]]
|
** [[info:info#Top][Info (info)]]
|
||||||
@ -5640,25 +5637,17 @@ Here are links to Python programming background videos:
|
|||||||
:CUSTOM_ID: sec:python-mode
|
:CUSTOM_ID: sec:python-mode
|
||||||
:END:
|
:END:
|
||||||
|
|
||||||
Listing [[lst:setup-python-mode][setup Python mode]] and [[lst:choose-common-python-interpreter][choose common Python interpreter]] select a common
|
Listing [[lst:setup-python-mode][setup Python mode]] selects a common Python interpreter in a virtual
|
||||||
Python interpreter in a virtual environment for use in =python-mode= and
|
environment for use in =python-mode= and =ob-python=. The [[https://github.com/pythonic-emacs/pythonic#readme][pythonic]], [[https://github.com/jorgenschaefer/pyvenv#readme][pyvenv]], and
|
||||||
=ob-python= by means of src_emacs-lisp{(choose-common-python-interpreter)}. The
|
[[https://github.com/jorgenschaefer/pyvenv#readme][pyvenv]] packages allow to handle Python virtual environments within Emacs. The
|
||||||
[[https://github.com/pythonic-emacs/pythonic#readme][pythonic]], [[https://github.com/jorgenschaefer/pyvenv#readme][pyvenv]], and [[https://github.com/jorgenschaefer/pyvenv#readme][pyvenv]] packages allow to handle Python virtual
|
[[https://github.com/pyenv/pyenv][pyenv]] package provides support to work with [[https://github.com/pyenv/pyenv#readme][pyenv]] (eventually with
|
||||||
environments within Emacs. The [[https://github.com/pyenv/pyenv][pyenv]] package provides support to work with
|
[[https://github.com/pyenv/pyenv-virtualenv#readme][pyenv-virtualenv]]) to select between different python versions (eventually each
|
||||||
[[https://github.com/pyenv/pyenv#readme][pyenv]] (eventually with [[https://github.com/pyenv/pyenv-virtualenv#readme][pyenv-virtualenv]]) to select between different python
|
with different environments). In the end, all those packages do is to set
|
||||||
versions (eventually each with different environments). In the end, all those
|
=python-shell-virtualenv-root= (in case of [[https://github.com/pyenv/pyenv#readme][pyenv]] and [[https://github.com/pythonic-emacs/pythonic#readme][pythonic]]) or tweak the
|
||||||
packages do is to set =python-shell-virtualenv-root= (in case of [[https://github.com/pyenv/pyenv#readme][pyenv]] and
|
environment variables and restart the relevant Python child processes (in case
|
||||||
[[https://github.com/pythonic-emacs/pythonic#readme][pythonic]]) or tweak the environment variables and restart the relevant Python
|
of [[https://github.com/jorgenschaefer/pyvenv#readme][pyvenv]]). Therefore, I replace those packages with listing [[lst:access-pyenv][access pyenv]] and
|
||||||
child processes (in case of [[https://github.com/jorgenschaefer/pyvenv#readme][pyvenv]]). Therefore, I replace those packages with
|
[[lst:select-python-virtual-environment][select a Python interpreter in a virtual environment]] to set
|
||||||
listing [[lst:access-pyenv][access pyenv]] and [[lst:select-python-virtual-environment][select a Python interpreter in a virtual environment]] to
|
=python-shell-virtualenv-root= from within Emacs.
|
||||||
set =python-shell-virtualenv-root= from within Emacs.
|
|
||||||
|
|
||||||
Listing [[lst:setup-python-mode][setup Python mode]] and [[lst:choose-common-python-linter][choose common Python linter]] select a common Python
|
|
||||||
linter for the =python-check-command= and the =python-flymake-command= by means
|
|
||||||
of src_emacs-lisp{(choose-common-python-linter)} from:
|
|
||||||
1. [[https://github.com/PyCQA/pyflakes][Pyflakes - simple tool which checks Python source files for errors]].
|
|
||||||
2. [[https://flake8.pycqa.org/en/latest/][Flake8 - your tool for style guide enforcement]].
|
|
||||||
3. [[https://github.com/charliermarsh/ruff][Ruff - an extremely fast Python linter written in Rust]].
|
|
||||||
|
|
||||||
Listing [[lst:pyproject-toml-kickoff][kickoff pyproject.toml proposal]] facilitates dropping a [[https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml][pyproject.toml]]
|
Listing [[lst:pyproject-toml-kickoff][kickoff pyproject.toml proposal]] facilitates dropping a [[https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml][pyproject.toml]]
|
||||||
file into Python projects which anyhow should switch to using a [[https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml][pyproject.toml]]
|
file into Python projects which anyhow should switch to using a [[https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml][pyproject.toml]]
|
||||||
@ -5673,88 +5662,11 @@ rules which make [[https://flake8.pycqa.org/en/latest/][flake8]] or [[https://py
|
|||||||
Finally, listing [[lst:flake8-nocolor][flake8-nocolor]] and [[lst:ruff-nocolor][ruff-nocolor]] pipe the =stdout= output of the
|
Finally, listing [[lst:flake8-nocolor][flake8-nocolor]] and [[lst:ruff-nocolor][ruff-nocolor]] pipe the =stdout= output of the
|
||||||
[[https://pypi.org/project/flake8/][flake8]] and [[https://pypi.org/project/ruff/][ruff]] executables through =cat= to remove escape sequences.
|
[[https://pypi.org/project/flake8/][flake8]] and [[https://pypi.org/project/ruff/][ruff]] executables through =cat= to remove escape sequences.
|
||||||
|
|
||||||
#+caption[Choose a common Python interpreter]:
|
|
||||||
#+caption: Choose a common Python interpreter for =ob-python= and =python-mode=.
|
|
||||||
#+name: lst:choose-common-python-interpreter
|
|
||||||
#+begin_src emacs-lisp -n
|
|
||||||
(defun choose-common-python-interpreter (&optional interpreter)
|
|
||||||
"Let `ob-python' and `python-mode' use the same Python INTERPRETER."
|
|
||||||
(interactive)
|
|
||||||
(unless (featurep 'ob-python)
|
|
||||||
(set-org-babel-language-activity 'python (fboundp 'python-mode)))
|
|
||||||
(let* ((prompt (format "Choose Python (%s): "
|
|
||||||
(bound-and-true-p python-shell-interpreter)))
|
|
||||||
(choices '(ipython python))
|
|
||||||
(choice (if (member interpreter choices)
|
|
||||||
(symbol-name interpreter)
|
|
||||||
(completing-read prompt choices nil t))))
|
|
||||||
(when (boundp 'org-babel-python-command)
|
|
||||||
(pcase choice
|
|
||||||
("python"
|
|
||||||
(setopt org-babel-python-command
|
|
||||||
(concat (or (executable-find "python3")
|
|
||||||
(executable-find "python"))
|
|
||||||
" -E")))
|
|
||||||
("ipython"
|
|
||||||
(setopt org-babel-python-command
|
|
||||||
(concat (or (executable-find "ipython3")
|
|
||||||
(executable-find "ipython"))
|
|
||||||
" --simple-prompt --HistoryAccessor.enabled=False"))))
|
|
||||||
(message "Now `org-babel-python-command' equals %S"
|
|
||||||
org-babel-python-command))
|
|
||||||
(when (boundp 'python-shell-interpreter)
|
|
||||||
(pcase choice
|
|
||||||
("python"
|
|
||||||
(setopt python-shell-interpreter (or (executable-find "python3")
|
|
||||||
(executable-find "python"))
|
|
||||||
python-shell-interpreter-args "-E -i"))
|
|
||||||
("ipython"
|
|
||||||
(setopt python-shell-interpreter (or (executable-find "ipython3")
|
|
||||||
(executable-find "ipython"))
|
|
||||||
python-shell-interpreter-args
|
|
||||||
"--simple-prompt --HistoryAccessor.enabled=False")))
|
|
||||||
(message "Now `python-shell-interpreter' equals %S"
|
|
||||||
python-shell-interpreter))))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+caption[Choose a common Python linter]:
|
|
||||||
#+caption: Choose a common Python linter for =python-check-command= and
|
|
||||||
#+caption: =python-flymake-command=.
|
|
||||||
#+name: lst:choose-common-python-linter
|
|
||||||
#+begin_src emacs-lisp -n
|
|
||||||
(defun choose-common-python-linter (&optional linter)
|
|
||||||
"Let `python-check-command' and `python-flymake-command' use the same LINTER."
|
|
||||||
(interactive)
|
|
||||||
(let* ((prompt (format "Choose Python checker (%s): "
|
|
||||||
(bound-and-true-p python-check-command)))
|
|
||||||
(choices '(flake8-nocolor pyflakes ruff-nocolor))
|
|
||||||
(choice (if (member linter choices)
|
|
||||||
(symbol-name linter)
|
|
||||||
(completing-read prompt choices nil t))))
|
|
||||||
(when (and (boundp 'python-check-command) (boundp 'python-flymake-command))
|
|
||||||
(pcase choice
|
|
||||||
("flake8-nocolor"
|
|
||||||
(setopt python-check-command (executable-find choice)
|
|
||||||
python-flymake-command (list (executable-find choice) "-")))
|
|
||||||
("pyflakes"
|
|
||||||
(setopt python-check-command (executable-find choice)
|
|
||||||
python-flymake-command `(,(executable-find choice))))
|
|
||||||
("ruff-nocolor"
|
|
||||||
(setopt python-check-command (executable-find choice)
|
|
||||||
python-flymake-command (list (executable-find choice)
|
|
||||||
"--stdin-filename" "stdin" "-"))))
|
|
||||||
(when (bound-and-true-p python-check-custom-command)
|
|
||||||
(setq python-check-custom-command nil))
|
|
||||||
(message "Python checker commands are %S and %S"
|
|
||||||
python-check-command python-flymake-command))))
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
#+caption[Setup Python mode with =ob-python=]:
|
#+caption[Setup Python mode with =ob-python=]:
|
||||||
#+caption: Setup Python mode with =ob-python=.
|
#+caption: Setup Python mode with =ob-python=.
|
||||||
#+name: lst:setup-python-mode
|
#+name: lst:setup-python-mode
|
||||||
#+begin_src emacs-lisp -n
|
#+begin_src emacs-lisp -n
|
||||||
(with-eval-after-load 'ob-python
|
(with-eval-after-load 'ob-python
|
||||||
;; (choose-common-python-interpreter 'python)
|
|
||||||
(setopt org-babel-python-command (concat (or (executable-find "python3")
|
(setopt org-babel-python-command (concat (or (executable-find "python3")
|
||||||
(executable-find "python"))
|
(executable-find "python"))
|
||||||
" -E")))
|
" -E")))
|
||||||
@ -5763,11 +5675,9 @@ Finally, listing [[lst:flake8-nocolor][flake8-nocolor]] and [[lst:ruff-nocolor][
|
|||||||
(setopt python-indent-guess-indent-offset nil
|
(setopt python-indent-guess-indent-offset nil
|
||||||
python-shell-completion-native-disabled-interpreters '("ipython3"
|
python-shell-completion-native-disabled-interpreters '("ipython3"
|
||||||
"pypy")
|
"pypy")
|
||||||
;; (choose-common-python-interpreter 'python)
|
|
||||||
python-shell-interpreter (or (executable-find "python3")
|
python-shell-interpreter (or (executable-find "python3")
|
||||||
(executable-find "python"))
|
(executable-find "python"))
|
||||||
python-shell-interpreter-args "-E -i"
|
python-shell-interpreter-args "-E -i"
|
||||||
;; (choose-common-python-linter 'ruff-nocolor)
|
|
||||||
python-check-command (executable-find "ruff-nocolor")
|
python-check-command (executable-find "ruff-nocolor")
|
||||||
python-flymake-command (list (executable-find "ruff-nocolor")
|
python-flymake-command (list (executable-find "ruff-nocolor")
|
||||||
"--stdin-filename" "stdin" "-")))
|
"--stdin-filename" "stdin" "-")))
|
||||||
|
Loading…
Reference in New Issue
Block a user