Fabio Natali <m...@fabionatali.com> writes: > - Emacs and Org > - Guix, to install the dependencies and create a development environment > - direnv, to automatically load the Guix environment > - envrc.el, to use direnv from Emacs > ... > However, things don't work as expected when using emacsclient with an > existing Emacs server. Thanks to envrc.el the Guix environment gets > apparently activated in the buffer, as confirmed by the envrc flag in > the modeline and by the output of =(getenv "PATH")=. However, evaluating > the block results in the following error: > > #+begin_quote > /bin/bash: line 1: python: command not found > [ Babel evaluation exited with code 127 ] > #+end_quote
An ugly workaround could be using :python header argument to explicitly set the python path. Org babel uses a temporary buffer + `process-file' to evaluate code blocks with no session. The current directory is being set by let-binding `default-directory'. You can look into `org-babel-execute-src-block' (sets `default-directory') -> "(funcall cmd body params)" -> `org-babel-execute:python' -> `org-babel-python-evaluate' -> `org-babel-python-evaluate-external-process' -> `org-babel-eval' -> `org-babel--shell-command-on-region' -> `process-file' call chain and check where the envrc settings get lost. I am unsure how and why the Org's approach is not working together with envrc.el. It might be helpful to add envrc devs into the loop or debug things yourself. > Tangentially, if the block's header includes =:session=, as in > =#+begin_src python :session=, then the error is slightly different and > is displayed in the minibuffer as opposed to a separate buffer: > > #+begin_quote > make-process--with-editor-process-filter: Searching for program: No such file > or directory, python > #+end_quote This looks like "with-editor" package doing something funny. Not Org. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92>