0
votes

I have a virtual environment my_env in which I installed Anaconda. When I type

which python 

I get:

/user/pkgs/anaconda2/envs/my_env/bin/python

I have no errors importing numpy here:

(my_env) user@hostname:~/my_dir$ python
Python 2.7.12 |Continuum Analytics, Inc.| (default, Jul  2 2016, 17:42:40) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> import numpy as np
>>> 

But when I say 'import numpy as np' in a python program and run that from a shell script, I get:

(my_env) user@hostname:~/mydir$ ./program.sh 
Traceback (most recent call last):
  File "../python_program.py", line 3, in <module>
    import numpy as np
ImportError: No module named numpy

How can I fix this?

EDIT: I was asked what is in program.sh. The short answer is that I'm running different parameters in a loop. The long answer is:

#/bin/bash

i=0
while read a1 b1 c1 d1 e1 f1 g1 h1 i1
    do
    i=$(($i+1))
    mkdir RUN_EXP$i
    cp $a1 RUN_EXP$i
    cd RUN_EXP$i
    ../python_program.py --filename $a1 --reps $b1 --pop $c1 --susc $d1 --exp_trans $e1 --inf_period $f1\ $g1 --eps $h1\ $i1
    cd ..
    done < readparas.txt

The file readparas.txt has lines containing filename, reps, pop, susc, exp_trans, inf_period, and eps like this:

run_1.txt 50 162 0.30 0.1 5 9 0.1 0.25
run_1.txt 50 162 0.30 0.3 5 9 0.1 0.25
...
1
What is in program.sh?DYZ
@DYZ please see edit above.StatsSorceress

1 Answers

2
votes

Your shell script doesn't care about having a virtualenv active (it starts in a clean environment).

Instead of ../python_program.py you need to have the full executable path

 export PYTHON_ENV=/user/pkgs/anaconda2/envs/my_env

 $PYTHON_ENV/bin/python ../python_program.py --filename $a1 ...

Or you can append this to the top of python_program.py

#!/usr/bin/env python

Refer: The importance of env (and how it works with virtualenv)