我遇到的问题是当服务器运行wsgi脚本时,它失败说当尝试导入matplotlib时它无法找到正确的版本libz
importError: /lib64/libz.so.1: version `ZliB_1.2.3.4′ not found (required by /mypath/miniconda/lib/python2.7/site-packages/matplotlib/../../.././libpng16.so.16)
但是,正确的libz版本可以在/mypath/miniconda/lib/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,看起来它们都不是必需的.但这是我要尝试的下一个途径.即使它有效(但特别是如果没有),我会好奇是否有人对于发生了什么有任何想法.
提前致谢.
解决方法 将所有文件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)
总结以上是内存溢出为你收集整理的python-2.7 – 当python发行版中的正确版本时,为什么wsgi在/ lib64中查找库全部内容,希望文章能够帮你解决python-2.7 – 当python发行版中的正确版本时,为什么wsgi在/ lib64中查找库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)