emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Eglot, project.el, and python virtual environments


From: Eric Abrahamsen
Subject: Re: Eglot, project.el, and python virtual environments
Date: Wed, 16 Nov 2022 17:14:28 -0800
User-agent: Gnus/5.13 (Gnus v5.13)

Philip Kaludercic <philipk@posteo.net> writes:

> Eric Abrahamsen <eric@ericabrahamsen.net> writes:
>
>> Hi,
>>
>> Here's another issue that's technically a emacs.help question, but might
>> result in some code/documentation updates, so I'm sending it here.
>>
>> My main day-job code base is an AWS CloudFormation monstrosity involving
>> several Python Lambdas, among other things. Basic project structure
>> looks like:
>>
>> project_root
>> ├── .git
>> ├── src
>> │   └── python
>> │       ├── VeryImportantLambda
>> │       │   └── .venv
>> │       ├── MoreImportance
>> │       │   └── .venv
>> │       ├── RunInCaseOfEmergency
>> │       │   └── .venv
>>
>> I'm using the python-lsp-server python package in each Python
>> subdirectory, and the key is that each of those directories is a virtual
>> environment that needs to stay isolated from the others. Each has
>> different packages installed, and in some cases even the Python versions
>> are different (though I'm trying to get rid of that).
>>
>> When I was using lsp-mode this wasn't difficult, because lsp-mode and
>> project.el are essentially orthogonal: if I visited a python file in a
>> given lambda directory, I could use `pyvenv-activate' to activate that
>> environment, and then the `lsp' invocation would confine itself to
>> python files within the environment. Project.el just provided
>> project-wide navigation.
>>
>> Now I'm trying to move to Eglot, and there is tighter integration
>> between Eglot and project.el. Turning on Eglot in one lambda starts the
>> server for all Python libraries in the whole project, not just the
>> current environment. I looked into constructing my own version of the
>> call to `eglot', but it is tightly tied to a project, all the way down.
>>
>> Is anyone else handling this situation? Any suggestions how to make it
>> work?
>
> I am not certain if this is the right tool for the job, but have you
> taken a look at `buffer-env'?  I have used it in combination with Eglot,
> but the problem I was tackling was not the same as yours.

I hadn't seen that before, thanks. But it's pretty much what pvenv and
poetry-mode (and probably others) already do: make sure that a python
virtual environment is "activated" for buffers in a particular directory
tree.

With Danny's nudging I've nearly got this working, except for the
virtual environment aspect: once I've run Eglot in one python-mode
buffer, any time I switch to another python-mode buffer Eglot runs
immediately, before I've had time to activate the virtual environment,
and so fails to find the language server executable.

I'm sure with the proper use of hooks I'll be able to squeeze the
`pyvenv-activate' call in before Eglot runs.

Eric




reply via email to

[Prev in Thread] Current Thread [Next in Thread]