Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

virtualenvwrapper functions unavailable in shell scripts

So, once again, I make a nice python program which makes my life ever the more easier and saves a lot of time. Ofcourse, this involves a virtualenv, made with the mkvirtualenv function of virtualenvwrapper. The project has a requirements.txt file with a few required libraries (requests too :D) and the program won't run without these libraries.

I am trying to add a bin/run-app executable shell script which would be in my path (symlink actually). Now, inside this script, I need to switch to the virtualenv before I can run this program. So I put this in

#!/bin/bash # cd into the project directory workon "$(cat .venv)" python main.py 

A file .venv contains the virtualenv name. But when I run this script, I get workon: command not found error.

Of course, I have the virtualenvwrapper.sh sourced in my bashrc but it doesn't seem to be available in this shell script.

So, how can I access those virtualenvwrapper functions here? Or am I doing this the wrong way? How do you launch your python tools, each of which has its own virtualenv!?

like image 860
sharat87 Avatar asked Sep 24 '11 11:09

sharat87


2 Answers

Just source the virtualenvwrapper.sh script in your script to import the virtualenvwrapper's functions. You should then be able to use the workon function in your script.

And maybe better, you could create a shell script (you could name it venv-run.sh for example) to run any Python script into a given virtualenv, and place it in /usr/bin, /usr/local/bin, or any directory which is in your PATH.

Such a script could look like this:

#!/bin/sh # if virtualenvwrapper.sh is in your PATH (i.e. installed with pip) source `which virtualenvwrapper.sh` #source /path/to/virtualenvwrapper.sh # if it's not in your PATH workon $1 python $2 deactivate 

And could be used simply like venv-run.sh my_virtualenv /path/to/script.py

like image 151
mdeous Avatar answered Sep 24 '22 08:09

mdeous


I can't find the way to trigger the commands of virtualenvwrapper in shell. But this trick can help: assume your env. name is myenv, then put following lines at the beginning of scripts:

ENV=myenv source $WORKON_HOME/$ENV/bin/activate 
like image 20
Coc B. Avatar answered Sep 22 '22 08:09

Coc B.