Joe*_*e M 5 mod-wsgi python-2.7
我创建了一个 Flask 应用程序,试图将其部署在 apache 服务器上。我安装了 python 的 conda 发行版,在其中下载了相关模块,包括 Flask、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)
但是,正确版本的 libz 位于 /mypath/miniconda/lib/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,这似乎都是必要的。但这是我要尝试的下一个途径。即使这有效(但特别是如果不起作用),我很好奇是否有人对发生的事情有任何想法。
提前致谢。
小智 1
将所有文件 libz.so* 复制到 LD_LIBRARY_PATH 中的任何路径
长话短说,我有 miniconda 并且遇到了同样的问题。我意识到 conda 更喜欢在 LD_LIBRARY_PATH 中搜索库而不是它自己的库。
因此,您需要在 LD_LIBRARY_PATH 中提供缺少的库,将整个 conda lib 目录添加到 LD_LIBRARY_PATH 从来都不是一个好主意(即它只会破坏您的整个系统)。因此,将适当的 lib 从 conda 库复制到 LD_LIBRARY_PATH 中的任何文件夹是最佳解决方案。
请注意,路径必须显示在 LD_LIBRARY_PATH 中的/lib64之前(即导出 LD_LIBRARY_PATH=/your/path:$LD_LIBRARY_PATH)
| 归档时间: |
|
| 查看次数: |
825 次 |
| 最近记录: |