From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eric Abrahamsen Newsgroups: gmane.emacs.devel Subject: Eglot, project.el, and python virtual environments Date: Wed, 16 Nov 2022 10:37:46 -0800 Message-ID: <87zgcq68zp.fsf@ericabrahamsen.net> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="29112"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) To: emacs-devel@gnu.org Cancel-Lock: sha1:y5Li6/EvVm3rC7PDRQnWM8v14KI= Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Wed Nov 16 20:38:19 2022 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ovOEl-0007NY-84 for ged-emacs-devel@m.gmane-mx.org; Wed, 16 Nov 2022 20:38:19 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ovOEg-0003rc-SG; Wed, 16 Nov 2022 14:38:14 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ovNIU-0004Ir-Id for emacs-devel@gnu.org; Wed, 16 Nov 2022 13:38:06 -0500 Original-Received: from ciao.gmane.io ([116.202.254.214]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ovNIS-0005rC-Mh for emacs-devel@gnu.org; Wed, 16 Nov 2022 13:38:06 -0500 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1ovNIQ-0003B5-Aa for emacs-devel@gnu.org; Wed, 16 Nov 2022 19:38:02 +0100 X-Injected-Via-Gmane: http://gmane.org/ Received-SPF: pass client-ip=116.202.254.214; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.25, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Wed, 16 Nov 2022 14:38:10 -0500 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:299978 Archived-At: 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? Thanks, Eric