root(またはsudo)アクセス権を持たないリモート(Debian squeeze)システムに特定の(プライベート、デジタル)Pythonモジュールをインストールしたいと思います。 python-devパッケージがインストールされていないので、Python 2.7をローカルにコンパイルしてインストールしました(./configure --prefix=$HOME/rtを使用)。また必須なので、setup.pyの--userオプションを使用してnumpy、scipy、およびtinyarrayをインストールしました。後で問題なくモジュールを取り付けました。しかし、Pythonにモジュールをインポートした後、次のメッセージが表示されます。
RuntimeWarning:SciPyのインストールはUMFPACKを使用しません。代わりに、SciPyは付属のSuperLuバージョンを使用します。この場合、パフォーマンスが非常に低下する可能性があります。
実は競技力はあまりありませんでした。さらなる調査により、このモジュールがumfpackとMUMPSの使用をサポートしていることがわかりました。どちらも許可されていますが、他のシステムではMUMPSがわずかに優れたパフォーマンスを発揮することがわかりました。私のインストールも成功しませんでした。 umfpackに関しては、もはや存在しないscipyのscipackに加えて、インストール方法に関する情報が見つかりませんでした。
それでMUMPSをインストールしてみました。
モジュールのインストールファイルから:
ビルドの構成
インストールスクリプトは、LAPACKとBLAS、およびオプションでMUMPSを接続する方法を知る必要があります。デフォルトでは、LAPACKとBLASは一般的な名前で見つけることができると仮定します。デフォルトでは、MUMPSは
libmumps-scotch-dev
パッケージをインストールするときにDebianベースのシステムを除いて接続されません。
build.conf
これらの設定はすべて、配布ルートディレクトリにファイルを作成/編集することで構成できます。構成ファイルは、[依存関係名]ヘッダーと名前=値項目につながる各依存関係について、1つずつ複数のセクションで構成されています。可能な名前はキーワード引数ですdistutils.core.Extension
(this document <http://docs.python.org/distutils/apiref.html>
完全なリストは上から3番目の表を参照)。値はスペースで区切られた文字列のリストです。現在利用可能な2つのセクションは[lapack]と[mumps]です。前者はLAPACKへのリンクを構成します。そしてBLAS、後者とMUMPS(LAPACKとBLASを除く)。
build.conf
自己コンパイルされたMUMPS、SCOTCH <http://www.labri.fr/perso/pelegrin/scotch/>
_、およびMETIS <http://glaros.dtc.umn.edu/gkhome/metis/metis/overview>
_ ::接続の例
[mumps]
libraries = zmumps mumps_common pord metis esmumps scotch scotcherr mpiseq
gfortran
Intel MKLとの接続例
build.conf
::
[lapack]
libraries = mkl_intel_lp64 mkl_sequential mkl_core mkl_def
library_dirs = /opt/intel/mkl/lib/intel64
extra_link_args = -Wl,-rpath=/opt/intel/mkl/lib/intel64
詳細な構文は_
build.conf
にありますdocumentation of Python's configparser module <http://docs.python.org/3/library/configparser.html#supported-ini-file-structure>
。
次のbuild.confを使用してMUMPSをコンパイルし、モジュールを再構築しました。
[mumps]
libraries = zmumps mumps_common pord
library_dirs = /*path_to_mumps_compilation*/lib /*path_to_mumps_compilation*/libseq
include_dirs = /*path_to_mumps_compilation*/include
extra_link_args = -Wl,-rpath=/*path_to_mumps_compilation*/lib
モジュールを再インストールしてPythonにインポートすると、インポートエラーが発生します。
/*path_to*/_mumps.so: 未定義シンボル: mumps_get_mapping
_mumps.soをチェックした結果、そのシンボルは実際には定義されていないようです。インストール中に使用された_mumps.soへのリンクコマンドは次のとおりです。
gcc -pthread -shared build/temp.linux-i686-2.7/kwant/linalg/_mumps.o -L/u/fphys/iw386/rt/lib -lmumps_common -lzmumps -lpord -lmetis -lesmumps -lscotch -lscotcherr -lmpiseq -llapack -lblas -o build/lib.linux-i686-2.7/kwant/linalg/_mumps.so -Wl,-rpath=/u/fphys/iw386/rt/lib
libmumps_common.aではmumps_commonがロードされ、mumps_get_mappingは定義されていません。
$ nm -g rt/lib/libmumps_common.a |grep mumps_get_mapping
00000000 T mumps_get_mapping
「仮記号」とは何か分からない。これも定義されていないことを意味しますか?
次に、ソースからビルドし(インストールファイルの例で提案されているように)、次のbuild.confを使用してscotchとmetisをインストールしてみました。
[mumps]
libraries = zmumps mumps_common pord metis esmumps scotch scotcherr mpiseq gfortran
library_dirs = /u/fphys/iw386/rt/lib
include_dirs = /u/fphys/iw386/rt/include
extra_link_args = -Wl,-rpath=/u/fphys/iw386/rt/lib
すべてのライブラリが/u/fphys/iw386/rt/libに移動され、すべてのヘッダファイルが/u/fphys/iw386/rt/includeに移動されました。
インポート時にエラーメッセージが次のように変更されました。
_mumps.so: 未定義シンボル: for_write_seq_lis
for_write_seq_lisはFortran関連の方法のようです。ちなみに、私が使用したgfortranライブラリファイルは、gfortranパッケージを介してシステムによって提供されるものです。私はソースからgfortranとgccとそれらの依存関係を構築するのを避けたいと思います。
どんな助けでも大変感謝します。