apache+wsgi网站如何设置LD_LIBRARY_PATH

How to set LD_LIBRARY_PATH for apache+wsgi website

我正在尝试在我的基于 wsgi(apache + flask)的网站中使用 python 库。

在独立命令脚本中使用库时,我必须将库路径添加到 LD_LIBRARY_PATH

所以这适用于独立脚本:

# export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
# python script.py

现在,当我尝试通过 Apache+wsgi 使用这个 python 库时,我需要将相同的路径传递给 apache worker。我怎样才能做到这一点?

您编译和安装的 Python 模块扩展是否需要该库?如果是,请将 LD_RUN_PATH 环境变量设置为编译和安装 Python 模块时库所在的目录。这样,该位置将嵌入 Python 模块扩展本身,您在 运行 时不需要 LD_LIBRARY_PATH

使用环境变量实现此目的的唯一其他方法是在 Apache 的启动脚本中设置 LD_LIBRARY_PATH,以便在启动 Apache 时根据需要进行设置。这意味着摆弄系统启动脚本并不理想或不实用。

最后一种可能可行但不是很好的想法甚至可能行不通的方法是使用:

LoadFile "/usr/local/lib/libmylib.so"

在 Apache 配置中。这将在启动时强制将特定库链接到 Apache,但根据库的使用方式,这可能不起作用。

对我来说,更简单的解决方案是遍历 LD_LIBRARY_PATH 并创建指向 /usr/lib 的软链接。如果您的 LD_LIBRARY_PATH 不是太长,则非常有效:

~/opt/lib$ for f in $(ls) ; do sudo ln -s `pwd`/$f /usr/lib/$f ; done