9

My system is macOS and I have both python 2 and 3 installed. I am currently working on a side project for which I want to use Django 1.8 and python 3.4.

I have created a virtual environment with the python 3 command pyvenv venv in the parent folder of my project (I prefer to have my python project folders to be self contained).

At the moment, I cannot get Emacs to recognise and therefore limit all code related assist to the virtual environment.

In addition, is it possible to setup per-project settings such that I can have different projects use different python versions and environment? The ideal scenario will be, when I change into a project directory and start Emacs, it will pick all it's environment settings from that project directory according to some local settings file.

1
  • I don't know the difference between pyvenv and virtualevn, which I'm familiar with, but can't you just bind python-shell-virtualenv-root to the right path? Either via a file variables or dir variables. E.g. # -*- python-shell-virtualenv-root: "../env" -*-. If this does not work with pyvenv please fill a bug report, M-x report-emacs-bug. Commented Jun 28, 2015 at 11:22

2 Answers 2

9

There is a package called pyvenv to manage virtual environmnets in emacs. Try installing it with

`M-x package-install RET pyvenv RET` 

Now You to activate env in your emacs, You can run

M-x pyvenv-activate RET <path-to-venv> 

Checkout: https://github.com/jorgenschaefer/pyvenv

For per project management, You can use hooks to activate venv automatically.

2
  • 1
    i have do it, but i can't type pyvenv-activate :-( Commented Jan 16, 2018 at 14:08
  • Does anyone know if it works with dap-debug? Commented Dec 4, 2023 at 16:31
5

I am using https://github.com/jorgenschaefer/pyvenv as well, and I set it up like so:

(use-package pyvenv :ensure t :config (pyvenv-mode 1)) 

This pyvenv-mode 1 part is essential. This will automatically make the venv activate when the variable pyvenv-activate is changed.

So, now leverage .dir-locals.el to set that for my projects.

((nil . ((pyvenv-activate . "~/repos/my_proj/.venv")))) 

Now when I open a file in my project, that virtual environment is activated!

0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.