当python发行版中的正确版本时,为什么wsgi在/ lib64中查找库

时间:2015-11-03 11:09:54

标签: python-2.7 mod-wsgi

我已经创建了一个烧瓶应用程序,我试图在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所需)

然而,在/ mypath / miniconda / lib / libz找到正确版本的libz。*

wsgi模块是使用此版本的python构建的。另外,apache init脚本在python的这个位置设置PATH环境变量(并且系统上没有其他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 个答案:

答案 0 :(得分: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)