オープンソースのアカデミック コードを動作させようとしています (プロジェクトのホームはこちらです)。これは、(非常に) 薄い python ラッパーを備えた大きな C++ コードベースでありCDLL
、C++ をロードし、コードのプリミティブ python スクリプトを可能にするために使用できるいくつかの C 関数を呼び出すために使用されます。
ただし、最初のインポート コードは、サイト パッケージ内の隣にある .so ファイルを見つけることができないため、クラッシュします。
インストールされたファイルで:
from ctypes import *
try:
self.lib = CDLL("_lammps.so")
except:
try:
self.lib = CDLL("_lammps_serial.so")
except:
raise OSError,"Could not load LAMMPS dynamic library"
そしてスクリプトまたはインタープリターで:
from lammps import lammps
l = lammps()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "lammps.py", line 42, in __init__
raise OSError,"Could not load LAMMPS dynamic library"
OSError: Could not load LAMMPS dynamic library
他の回答ではこれがカバーされているように見えるかもしれませんが、これは、実際に呼び出されたスクリプト (またはインタープリターを実行したプロンプトの作業ディレクトリ) 内で呼び出された場合にのみ機能CDLL()
します。つまり、「相対パス」がユーザー空間ではなく、 python-ライブラリ-スペース。
自分で構築した C/C++ ライブラリをインポートするために確実にインストールするにはどうすればよいですか? のようなシステムライブラリの場所を汚染する/usr/lib
ことを除いて、これはあまりpythonicではありませんが、簡単な解決策がわかりません。
(編集:関数名を修正、不明確なリファクタリングは役に立たない!申し訳ありません!)