Create a gist now

Instantly share code, notes, and snippets.

Prototype of an extension to provide acess to virtual python environment on an IPython notebook cell
# -*- coding: utf-8 -*-
import os
import as nt
from IPython.core.interactiveshell import InteractiveShell
def setup():
ip = InteractiveShell()
def test_virtualenv():
ip = InteractiveShell()
result = ip.run_cell_magic('virtualenv','my_env','import sys; print sys.version')
Virtualenv magic
Requires virtualenv and virtualenv Wrapper
import sys
import os
import shlex
from subprocess import Popen, PIPE
from IPython.core.magic import cell_magic
from IPython.core.interactiveshell import InteractiveShell
def virtualenv(line, cell):
This magic enables the excution of the code of the cell on a
pre-existing virtualenv.
To activate this magic just write at the top of the cell:
%% virtualenv my_env
if not os.path.exists(os.environ['WORKON_HOME']+line):
print >> sys.stderr, "Environment {} does no exist.".format(line)
env_activate_cmd = 'bash -c source '+os.environ['WORKON_HOME'] + '/{}/bin/activate'.format(line)
cmd = shlex.split(env_activate_cmd) + ["&&","python","-"]
p = Popen(cmd, stdout=PIPE, stderr=PIPE, stdin=PIPE, shell=True)
out,err = p.communicate(cell)
if err:
print >> sys.stderr, err
return out
if 'WORKON_HOME' in os.environ:
#~ get_ipython().register_magic_function(virtualenv, 'cell')
InteractiveShell().register_magic_function(virtualenv, 'cell')

@minrk : Would this be a start of a virtualenv cell?

it requires virtualenv to be installed and the env to exist prior to using this


Rather than calling get_ipython() or InteractiveShell(), an IPython extension should offer a load_ipython_extension(ip) method, which will be called with the shell object when it's loaded. Docs:

(The rationale for this is that we have a long term goal to allow more than one InteractiveShell object in the same process - so we're trying not to treat it like a singleton)


I'll study other extensions and modify my code to conform.
thanks @takluyver


Thanks @turicas for the tip on how to make the bash command work...


@fccoelho, PEP8, please! :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment