Thanks for the quick reply with both explanation and workaround!
On Saturday, April 18, 2015 at 7:42:44 PM UTC-7, Jameson wrote:
>
> System linkers ignore any changes to the LD_LIBRARY_PATH variable after
> the program starts running. I agree, it's definitely frustrating and
> confusing behavior to adopt.
>
> As a bit of a workaround, you can push the path onto `Base.DL_LOAD_PATH`
> and then call `dlopen("libjpeg")` manually
>
> On Sat, Apr 18, 2015 at 10:28 PM Peter Simon <[email protected]
> <javascript:>> wrote:
>
>> 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
>>
>>