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.

Stefan
  • 26,404
  • 3
  • 48
  • 85
Napoleon
  • 237
  • 1
  • 4
  • 9
  • 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. – rasmus Jun 28 '15 at 11:22

2 Answers2

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.

Chillar Anand
  • 4,102
  • 1
  • 24
  • 52
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!

user5293
  • 171
  • 1
  • 5