I'm running on CentOS with Julia 0.3.7.  I'm writing an executable Julia 
script for other non-Julia, non-Python users to run as a batch job.  The 
script generates plots using the following setup:

using PyCall
pyimport("matplotlib")[:use]("Agg")  # Doesn't require X connection
@pyimport matplotlib.pyplot as plt


Prior to this it first checks that Anaconda Python is set up in the user's 
path.  If not, it sets the appropriate values of environment variables as 
follows

    pypath = ""
    stderrold = STDERR; (rd,wr) = redirect_stderr()
    try
        pypath = readall(`which python`)
    end
    redirect_stderr(stderrold)
    if isempty(search(pypath, "anaconda"))
        println("Adding Anaconda Python to environment variables")
        PREFIX = "/projects/antenna_eng/tools/python/CentOS/anaconda"
        ENV["PATH"] = "$(PREFIX)/bin:$(ENV["PATH"])"
        ENV["LD_LIBRARY_PATH"] = 
"""$(PREFIX)/lib:$(ENV["LD_LIBRARY_PATH"])"""
        pyversion=readchomp(`python -c "import sys; print 
sys.version.split()[0]"`)
        ENV["PYTHONSRC"] = "$(PREFIX)/src/Python-$(pyversion)"
    end

These valiues for the environment variables are taken from the file 
python_envars.sh that is installed with Anaconda Python.

The pyimport and @pyimport commands work fine.  However, when the Julia 
script gets to the part where it actually generates plots, Python complains 
that it can't find a file:

ERROR: PyError (:PyImport_ImportModule) <type 'exceptions.ImportError'>
ImportError('libjpeg.so.8: cannot open shared object file: No such file or 
directory',)

This shared library is actually sitting in the directory in the Anaconda 
installation that was added to the LD_LIBRARY_PATH environment variable.

If I set up the environment variables before launching the Julia script, 
all is well.

Is this expected behavior?  I thought that if I altered the environment 
variables, they would be passed along to any programs launched by the Julia 
script, including Python via the PyCall package.  I guess I could write a 
shell script that sets up the environment variables and then calls my Julia 
script, but I would prefer to do this all with a single Julia script, if 
possible.  Any suggestions?

Thanks,
--Peter

Reply via email to