org-modeでのPython仮想環境

poetry で作成した仮想環境を org-mode のコードブロックで使うことを考える。仮想環境は $HOME/repos/ks_python_env に作成されているとする。

コードブロックのデフォルトのHeaderを定義しておく。セッション名とファイルが存在するフォルダパスをどのコードブロックでも共通して使用するようにしている。

#+PROPERTY: header-args:python :session (concat "*python* - " (buffer-file-name))
#+PROPERTY: header-args:python+ :var cur_dir=(identity default-directory)
#+PROPERTY: header-args:python+ :eval no-export

poetry コマンドの機能を利用して、仮想環境の python のパスを org-babel-python-command に設定する。

#+begin_src elisp :dir ~/repos/ks_python_env :exports none
  (let* ((env_path (s-trim (shell-command-to-string "poetry env info -p")))
  (python_path (f-join env_path "bin/python")))
  (setq-local org-babel-python-command python_path))
#+end_src

上記を実行すれば、下記のように仮想環境のPythonが実行される。

#+begin_src python :results output :exports both
  import sys  
  print(sys.version)
#+end_src  

import sys  
print(sys.version)
3.8.12 (default, May  6 2022, 13:18:25) 
[GCC 11.2.0]