我的Python脚本在shell中运行良好。但是,当我把它(在我自己的帐户下)时,它给了我以下错误:
/ usr / local / bin / python:加载共享库时出错:libpython2.7.so.1.0:无法打开共享对象文件:没有这样的文件或目录
脚本的第一行有:
#!/usr/local/bin/python
我知道我的〜/ .bashrc文件中有以下行,它解释了它在shell中的作用
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
如果我使用以下内容进行操作,它也可以使用,但它看起来很难看,而且我讨厌申请每个cron工作。
00 * * * 1-5 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib && /path/somejob.py
有更好的方法吗?我知道我们的管理员曾经在某些共享的nfs路径上安装了早期版本的Python,并且它不需要像here所述的任何系统级配置更改。我们的旧Python脚本只是将这一行作为第一行,没有明确设置LD_LIBRARY_PATH。
#!/nfs/apps/python/bin/python
在旧的nfs安装中
/nfs/apps/python/
-- bin
-- lib
-- share
-- include
当前的Python是2.7.3,它安装如下:(Linux CentOS 6)
./configure --prefix=/usr/local --enable-shared --with-system-expat --with-system-ffi
make
make install
更新
正如ansh0I建议的那样,将LD_LIBRARY_PATH添加到cronab的顶部就可以了!
python抱怨共享库的原因是它与 - enable-shared 一起安装。因此,python二进制文件要小得多,在/usr/local/lib/libpython2.7.so中有很多真正的解释器代码 shared 。然后你需要通过设置LD_LIBRARY_PATH告诉python在哪里找到共享库。如果安装了python 没有--enable-shared ,那么二进制文件本身要大得多,而且你不需要指定任何LD_LIBRARY_PATH
答案 0 :(得分:6)
假设您的LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
表达式工作正常,您可以在crontab文件的顶部设置环境变量,如下所示
#Setting up Environment variables
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
#Here follow the cron jobs
* * * * * echo $LD_LIBRARY_PATH >> /home/user/logfile.log
* * * * * some/cron/job.py