2

私はできません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) を含むパスを に追加したことを確認しました。basedirsetupext.pypython 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ですか?

アップデート:

を見ると、インストールした libpng のバージョンを確認するメソッドをクエリしているsetupext.pyように見えます。システムのインストールが返されていることがわかりました。python setup installpkg-configSetupPackage_check_for_pkg_configpkg-config

$ pkg-config --libs libpng
-lpng12

basedirmatplotlib で更新したsetupext.pyにもかかわらず、ローカルにインストールしたLD_LIBRARY_PATH最新バージョンを指すようにします。libpng

pkg-config正しいバージョンを返す方法についてのアイデアはありますか?

4

2 に答える 2

5

これはpkg-config問題です。matplotlib のインストールは (残念ながら、またはおそらくそうではない) の出力に依存しすぎていpkg-configます。

通常の方法で libpng をビルドしたと仮定すると、 (および)/home/james/local/libを含むpkgconfig サブディレクトリが にあるはずです。を実行すると、もちろん、後者はlibpngの正しいファイルを取得しようとします。そのためには、変数を使用して pkgconfig サブディレクトリをポイントします。libpng.pclibpng16.pcsetupext.pypkg-config.pcPKG_CONFIG_PATH

$ export PKG_CONFIG_PATH=/home/james/local/lib/pkgconfig

次に、matplotlib を再度インストールし、正しい libpng バージョンが検出されることを確認します。

$ python setup.py build
basedirlist is: ['/usr/local', '/usr']
============================================================================
BUILDING MATPLOTLIB
            matplotlib: 1.1.0
                python: 2.7.4 (default, Apr  8 2013, 16:36:47)  [GCC 4.4.5]
              platform: linux2

REQUIRED DEPENDENCIES
                 numpy: 1.7.0
             freetype2: 12.0.6

OPTIONAL BACKEND DEPENDENCIES
                libpng: 1.6.1
               Tkinter: Tkinter: 81008, Tk: 8.4, Tcl: 8.4

(私にとっては、もちろん、異なる PKG_CONFIG_PATH を使用します。はい、いくつかの依存関係をアップグレードしたい場合があります。)

変更すらしていないことに注意してくださいbasedirlist。デフォルトのままです。他のパッケージを取得できない場合は、間にコロンを付けてpkg-configディレクトリを追加してください。PKG_CONFIG_PATHでもこれで十分だと思います。

于 2013-04-26T14:35:45.357 に答える
0

試す

 export LD_LIBRARY_PATH=/home/james/local/lib

次に、Matplotlib を実行します...これにより、matplotlib がローカル バージョンを指すようになります。

于 2013-04-26T01:35:20.733 に答える