Skip to content

Instantly share code, notes, and snippets.

@fccoelho
Forked from minrk/shebang.py
Created June 5, 2012 11:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fccoelho/2874403 to your computer and use it in GitHub Desktop.
Save fccoelho/2874403 to your computer and use it in GitHub Desktop.
Prototype of an extension to provide acess to virtual python environment on an IPython notebook cell
import sys
import os
import shlex
from subprocess import Popen, PIPE
from IPython.utils.py3compat import unicode_to_str
def workon(line, cell):
if not os.path.exists(os.environ['WORKON_HOME']+line):
print >> sys.stderr, "Environment {} does no exist.".format(line)
return
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
print out
if 'WORKON_HOME' in os.environ:
get_ipython().register_magic_function(workon, 'cell')
"""
From now, you can do:
%%workon pre_existing_env
# Now the following python code will be executed under pre_existing_env
import sys
print sys.version
"""
@fccoelho
Copy link
Author

fccoelho commented Jun 5, 2012

@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

@takluyver
Copy link

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: http://ipython.org/ipython-doc/stable/config/extensions/index.html

(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)

@fccoelho
Copy link
Author

fccoelho commented Jun 7, 2012

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

@fccoelho
Copy link
Author

fccoelho commented Jun 8, 2012

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

@turicas
Copy link

turicas commented Jun 9, 2012

@fccoelho, PEP8, please! :-)

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