Skip to content

Teaching hy-shell to set PYTHONPATH #109

@igoralmeida

Description

@igoralmeida

Hy all :)

Thanks for the nice piece of software. Looking around hy-shell.el, I could not find a way to pass PYTHONPATH to the inferior process --- without a global setenv I guess, which I'd like to avoid since I have other REPLs running. Can you confirm if that's the case? I may simply be missing the correct configuration or required workflow.

If so, here's how I got it to work (this is on top of df81486 and hy 0.25.0):

diff --git a/hy-shell.el b/hy-shell.el
index 22927f2..104d643 100644
--- a/hy-shell.el
+++ b/hy-shell.el
@@ -51,6 +51,9 @@
 (defvar hy-shell--redirect-timeout 0.5
   "Seconds (float) to allow redirection commands to complete before quitting.")
 
+(defvar hy-shell-extra-pythonpaths nil
+  "Extra pythonpaths, a la `python-shell-extra-pythonpaths'.")
+
 ;;;; Managed
 
 (defconst hy-shell--name "Hy"
@@ -136,7 +139,12 @@
             (split-string-and-unquote (hy-shell--format-startup-command)))
            (name
             (if (hy-shell--internal?) hy-shell--name-internal hy-shell--name)))
-      (apply #'make-comint-in-buffer name nil program nil switches)
+
+      (let ((process-environment (cl-copy-list process-environment)))
+        (when hy-shell-extra-pythonpaths
+          (setenv "PYTHONPATH" (let ((python-shell-extra-pythonpaths hy-shell-extra-pythonpaths))
+                                 (python-shell-calculate-pythonpath))))
+        (apply #'make-comint-in-buffer name nil program nil switches))
 
       (unless (derived-mode-p 'inferior-hy-mode)
         (inferior-hy-mode))

Basically I abuse python-shell-calculate-pythonpath and override process-environment before starting the process. That way I can have a list of paths in hy-shell-extra-pythonpaths, set by dir-locals for example.

Thoughts?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions