Skip to content

Teaching hy-shell to set PYTHONPATH #109

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?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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