我的 Python 脚本在 shell 中运行良好。但是,当我 cron 它(在我自己的帐户下)时,它给了我以下错误:
/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 它也可以工作,但它看起来很难看,我讨厌适用于每一个 cron 工作。
00 * * * 1-5 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib && /path/somejob.py
有更好的方法吗?我知道我们的管理员曾经在一些共享的 nfs 路径上安装了早期版本的 Python,并且它不需要任何系统级别的配置更改,如此处所述。我们的旧 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 中共享。然后你需要通过设置 LD_LIBRARY_PATH 告诉 python 在哪里可以找到共享库。如果 python 安装时没有 --enable-shared,二进制文件本身要大得多,你不需要指定任何 LD_LIBRARY_PATH