我无法import matplotlib._png
:
import matplotlib._png as _png ImportError:
/home/james/opt/python/virtualenvs/work/lib/python2.7/site-packages/matplotlib-1.3.x-py2.7-linux-x86_64.egg/matplotlib/_png.so:未定义符号:png_set_longjmp_fn
此错误使我无法运行import pylab
(因为这最终会导入matplotlib._png
)。
我matplotlib
从源代码安装,并确保在运行之前将带有本地安装 ( /home/james/local
) 的路径添加到basedir
in 中。setupext.py
python setup.py install
REQUIRED DEPENDENCIES AND EXTENSIONS
numpy: yes [version 1.7.1]
dateutil: yes [using dateutil version 2.1]
tornado: yes [using tornado version 3.0.1]
pyparsing: yes [using pyparsing version 1.5.7]
pycxx: yes [Couldn't import. Using local copy.]
libagg: yes [pkg-config information for 'libagg' could not
be found Using local copy.]
freetype: yes [version 16.0.10]
png: yes [version 1.2.10]
到目前为止我的研究:
从上面可以看出,matplotlib 似乎找到1.2.10
了版本,即使我拥有的版本/home/james/local
是1.6.2
:
$ find . -iname '*libpng*'
./libpng16.so.16.1.0
./libpng16.so
./libpng16.so.16
./libpng16.a
./libpng.a
./libpng.so
./libpng16.la
./pkgconfig/libpng.pc
./pkgconfig/libpng16.pc
./libpng.la
更具体地说,我修改了以下行setupext.py
:
return basedir_map.get(sys.platform, ['/home/james/local', '/usr/local', '/usr'])
但是matplotlib似乎找到了系统版本:
$ locate libpng
/usr/lib/libpng.so
/usr/lib/libpng.so.3
/usr/lib/libpng.so.3.10.0
/usr/lib/libpng12.a
/usr/lib/libpng12.so
/usr/lib/libpng12.so.0
/usr/lib/libpng12.so.0.10.0
这可能是问题吗?为什么我无法导入matplotlib._png
?
更新:
看了一下setupext.py
,好像是通过python setup install
查询方法来确定我安装的libpng的版本。原来是返回系统安装:pkg-config
SetupPackage
_check_for_pkg_config
pkg-config
$ pkg-config --libs libpng
-lpng12
即使我basedir
在 matplotlib中进行了更新setupext.py
,并LD_LIBRARY_PATH
让它们指向libpng
我在本地安装的更新版本。
关于如何pkg-config
返回正确版本的任何想法?