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!?
If your Python script requires a particular virtualenv then put/install it in virtualenv's
bin
directory. If you need access to that script outside of the environment then you could make a symlink.main.py from virtualenv's
bin
:Symlink in your PATH:
In bin/run-app:
You can also call the virtualenv's python executable directly. First find the path to the executable:
Then call from your shell script:
add these lines to your .bashrc or .bash_profile
and reopen your terminal and try
It's a known issue. As a workaround, you can make the content of the script a function and place it in either
~/.bashrc
or~/.profile
Apparently, I was doing this the wrong way. Instead of saving the virtualenv's name in the .venv file, I should be putting the virtualenv's directory path.
and in the
bin/run-app
, I putAnd yay!
I can't find the way to trigger the commands of
virtualenvwrapper
in shell. But this trick can help: assume your env. name ismyenv
, then put following lines at the beginning of scripts: