From Newsgroup: gnu.emacs.help
Rust Buckett <
rsstinnett@pm.me> writes:
Manuel Giraud <manuel@ledu-giraud.fr> writes:
Rust Buckett <rsstinnett@pm.me> writes:
Is there a way to activate a Python virtual environment in Eshell? When >>> I try `source ./.venv/bin/activate`, I get "Wrong type argument: listp,
"["". Obviously, this is because `source` is built into the shell
(bash, csh, fish, eshell, etc.) and the default activate is for bash.
So, I guess the real question is if there is already a script to
activate the venv in eshell? Or some other way to do it?
If you read "./.venv/bin/activate", you'll see that what it do mostly is
setting VIRTUAL_ENV to "./venv" and add "$VIRTUAL_ENV/bin" to your PATH
to access the "correct" python.
So doing the following should work:
export VIRTUAL_ENV="/absolute/path/to/venv"
export PATH="$VIRTUAL_ENV/bin":$PATH
But maybe you could come up with an elisp function to more easily
activate (and deactivate) those.
I realized that since you can evaluate elisp functions in eshell as you
would commands, I'm able to run `pyvenv-activate .venv` right in the
shell. This /almost/ works. `exec-path` shows the correct path and
`getenv "PATH"` shows the change, but `echo $PATH` does not. Guess
which one eshell uses.
If I run `pyvenv-activate .venv` then exit eshell and start it again, everything works. It's not as elegant as I would like, but I guess it
will have to do.
I haven't been on usenet in a while and ran across this thread. The
solution that I went with after a rather lengthy conversation on IRC
#emacs, was to create an alias called reload in eshell that evaluates `(eshell/export (concat "PATH=" (string-join exec-path ":")))`.
--
this is my clever sig.
--- Synchronet 3.22a-Linux NewsLink 1.2