> I have a similar question (importing cx_Oracle, but not related to > cron). I would like to use solution #2 below and it does not work. If > I set LD_LIBRARY_PATH before running python, it works. If I try to set > it via os.environ, it does not work. > > I have tried this in an interactive Python shell. I can print the > value of os.environ["LD_LIBRARY_PATH"] and it is correct, but the > import fails. The cx_Oracle.so file is found, but when it tries to > load the necessary Oracle library (libclntsh.so.9.0), I get the > message: > > ImportError: libclntsh.so.9.0: cannot open shared object file: No > such file or directory > > Is there something else I have to do when changing os.environ before > trying the import?
Well, all the oracle stuff is installed in /usr/lib/oracle on my computers (or /usr/share/oracle ... depends when and how I installed it), but I also always make the symbolic links in /usr/lib too. I guess once Python is started (and the C level library loader) you can't change LD_LIBRARY_PATH anymore. What I ussually set in os.environ is ORACLE_HOME because the oracle library still needs to find some additional files too. BTW cx_Oracle seems to only need /usr/lib/libnnz10.so and /usr/lib/libclntsh.so.10.1 but I also have these links in /usr/lib: libclntsh.so -> oracle/lib/libclntsh.so* (this is a link to the .so.10.1 file) libclntsh.so.10.1 -> oracle/lib/libclntsh.so.10.1* libnnz10.so -> oracle/lib/libnnz10.so* libocci.so -> oracle/lib/libocci.so* (this is a links to the .so.10.1 file libocci.so.10.1 -> oracle/lib/libocci.so.10.1* libociei.so -> oracle/lib/libociei.so* This is with oracle instant client 10 libraries. >> These environment variables are important for running any programs that >> use the oracle client libraries. The problem you have is that when you >> run the script from cron these environment variables are not set. >> >> Now, there are several ways how to handle this: >> 1. create a shell script that you call from cron, and it it set the >> environment variables and then call you python program >> >> 2. modify the environment in your python program (via os.environ) and >> then import cx_Oracle >> >> 3. modify your system so that no environment variables are neccesseary - >> actually this is not possible, but what I have is, symbolic links >> in /usr/lib to the libraries in $ORACLE_HOME/lib, thus I don't need the >> LD_LIBRARY_PATH variable, and the only other variable I need is the >> ORACLE_HOME, which is /usr/share/oracle on my system and it contains >> bin/ install/ lib/ network/ ocommon/ oracore/ rdbms/ sqlplus/ >> >> >> >> >> -- >> damjan -- damjan -- http://mail.python.org/mailman/listinfo/python-list