142

インポートしようとしていpycurlます:

$ python -c "import pycurl"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: libcurl.so.4: cannot open shared object file: No such file or directory

今、libcurl.so.4にある/usr/local/lib。ご覧のとおり、これは次のとおりですsys.path

$ python -c "import sys; print(sys.path)"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', 
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', 
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', 
'/usr/local/lib/python2.5/lib-dynload', 
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', 
'/usr/local/lib/python2.5/site-packages']

どんな助けでも大歓迎です。

4

7 に答える 7

172

sys.pathPython モジュールのみが検索されます。動的にリンクされたライブラリの場合、検索されるパスはLD_LIBRARY_PATH. が含まれているかどうかを確認し、LD_LIBRARY_PATH含まれ/usr/local/libていない場合は追加して、もう一度試してください。

いくつかの詳細情報 ( source ):

Linux では、環境変数 LD_LIBRARY_PATH はコロンで区切られた一連のディレクトリであり、標準のディレクトリ セットの前に最初にライブラリを検索する必要があります。これは、新しいライブラリをデバッグする場合や、特別な目的で非標準ライブラリを使用する場合に役立ちます。環境変数 LD_PRELOAD は、/etc/ld.so.preload と同様に、標準セットをオーバーライドする関数を含む共有ライブラリを一覧表示します。これらは、ローダー /lib/ld-linux.so によって実装されます。LD_LIBRARY_PATH は多くの Unix 系システムで機能しますが、すべてのシステムで機能するわけではありません。たとえば、この機能は HP-UX では使用できますが、環境変数 SHLIB_PATH として使用できます。AIX では、この機能は変数 LIBPATH (同じ構文でコロン区切りのリスト) を介して使用できます。

更新:を設定LD_LIBRARY_PATHするには、理想的には自分の~/.bashrc ファイルまたは同等のファイルで次のいずれかを使用します。

export LD_LIBRARY_PATH=/usr/local/lib

また

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

空 (空の文字列と同等、またはまったく存在しない) の場合は最初の形式を使用し、そうでない場合は 2 番目の形式を使用します。exportの使用に注意してください。

于 2009-07-08T19:12:33.003 に答える
24

そもそもpycurlをコンパイルするときに、ユーザー環境でLD_RUN_PATHを/ usr / local/libに設定することもできます。これにより、C拡張モジュールのRPATH属性に/ usr / local / libが埋め込まれるため、実行時にLD_LIBRARY_PATHを設定しなくても、実行時にライブラリがどこにあるかが自動的にわかります。

于 2009-07-10T12:17:02.383 に答える
10

まったく同じ問題がありました。curl 7.19 を /opt/curl/ にインストールして、本番サーバーの現在の curl に影響を与えないようにしました。libcurl.so.4 を /usr/lib にリンクしたら:

sudo ln -s /opt/curl/lib/libcurl.so /usr/lib/libcurl.so.4

それでも同じエラーが発生しました!ダーフ。

しかし、ldconfigを実行するとリンクが作成され、機能しました。LD_RUN_PATH または LD_LIBRARY_PATH を設定する必要はまったくありません。ldconfig を実行するだけで済みます。

于 2010-03-05T02:18:08.747 に答える
9

上記の回答の補足として、私は同様の問題にぶつかり、デフォルトでインストールされているPythonで完全に動作しています。

探している共有オブジェクトライブラリの例を呼び出すと、次のLD_LIBRARY_PATHようになります。

$ LD_LIBRARY_PATH=/path/to/mysodir:$LD_LIBRARY_PATH python example-so-user.py
python: can't open file 'example-so-user.py': [Errno 2] No such file or directory

特に、インポートについても文句を言わず、ソースファイルについても文句を言います。

LD_PRELOADしかし、 :を使用してオブジェクトのロードを強制すると、

$ LD_PRELOAD=/path/to/mysodir/mypyobj.so python example-so-user.py
python: error while loading shared libraries: libtiff.so.5: cannot open shared object file: No such file or directory

...依存関係がないことについて、より意味のあるエラーメッセージがすぐに表示されます。

私がこれをここに書き留めると思っただけです-乾杯!

于 2012-06-11T19:26:55.703 に答える