【问题标题】:Why is wsgi looking for a library in /lib64 when the correct version is in the python distribution当正确版本在 python 发行版中时,为什么 wsgi 在 /lib64 中寻找库
【发布时间】:2023-12-19 17:59:01
【问题描述】:

我创建了一个烧瓶应用程序,我试图将它部署在 apache 服务器上。我已经安装了 python 的 conda 发行版,我在其中下载了相关模块,包括烧瓶、matplotlib 等。我正在使用 wsgi 来启动应用程序。

我遇到的问题是,当服务器运行 wsgi 脚本时,它会说尝试导入 matplotlib 时找不到正确的版本 libz

ImportError: /lib64/libz.so.1: 找不到版本“ZLIB_1.2.3.4”(/mypath/miniconda/lib/python2.7/site-packages/matplotlib/../../ 需要.././libpng16.so.16)

但是在 /mypath/miniconda/lib/libz.* 中可以找到正确的 libz 版本

wsgi 模块是用这个版本的 python 构建的。此外,apache init 脚本将 PATH 环境变量设置为 python 的这个位置(并且系统上没有其他 python 2.7)。当我通过 wsgi 脚本打印 libpng 的 ldd 路径时,它指向 libz 的 python 版本作为它应该加载的版本。

linux-vdso.so.1 => (0x00007fff9fe00000)

libz.so.1 => /mypath/miniconda/lib/python2.7/site-packages/matplotlib/../../../././libz.so.1 (0x00007fb2e4388000)

libm.so.6 => /lib64/libm.so.6 (0x00007fb2e40e8000)

libc.so.6 => /lib64/libc.so.6 (0x00007fb2e3d50000)

/lib64/ld-linux-x86-64.so.2 (0x00000035a9e00000)

那么为什么它试图从 /lib64 加载?当我尝试从终端通过相同的 python 加载模块时,它加载得很好。我知道我的环境不会与 apache 环境相同,但我看不出有任何重大差异。

我没有尝试显式设置 LD_LIBRARY_PATH 或 WSGIPythonHome,这似乎都不是必需的。但这是我将尝试的下一条途径。即使这有效(但尤其是如果无效),我会很好奇是否有人对正在发生的事情有任何想法。

提前致谢。

【问题讨论】:

    标签: python-2.7 mod-wsgi


    【解决方案1】:

    将所有文件 libz.so* 复制到 LD_LIBRARY_PATH 中的任意路径

    长话短说,我有 miniconda 并且遇到了同样的问题。我意识到 conda 更喜欢在 LD_LIBRARY_PATH 中搜索库而不是它自己的库。

    因此,您需要在 LD_LIBRARY_PATH 中提供缺失的库,将整个 conda lib 目录添加到 LD_LIBRARY_PATH 绝不是一个好主意(即它只会破坏您的整个系统)。 因此,最好将 conda 库中的 lib 复制到 LD_LIBRARY_PATH 中的任何文件夹中。

    注意路径必须显示在您的 LD_LIBRARY_PATH 中的 /lib64 之前(即 export LD_LIBRARY_PATH=/your/path:$LD_LIBRARY_PATH)

    【讨论】:

      最近更新 更多