0

ライブラリは、shapelyctypes.util.find_library('c') で見つけて、libc から関数をロードしようとします。

Apple 提供のシステム Python を使用する「通常の」Python 環境では、次のように動作します。

$ python -c 'from ctypes.util import find_library; print find_library("c")'
/usr/lib/libc.dylib

しかし、Canopy virtualenv 内では失敗します。

$ . /Users/tim/Library/Enthought/Canopy_64bit/User/bin/activate
(Canopy 64bit)$ python -c 'from ctypes.util import find_library; print find_library("c")'
None

なんで?どうすればこれを機能させることができますか?

4

2 に答える 2

0

これは、ctypes.macholib.dyld.dyld_default_search のこのロジックから生じるようです: https://gist.github.com/tdsmith/5768065

  • フレームワークは両方の Python で None です
  • fallback_library_path は[]、システム Python および['/Users/tim/Library/Enthought/Canopy_64bit/User/lib', '/Users/tim/Library/Enthought/Canopy_64bit/System/lib', '/Applications/Canopy.app/appdata/canopy-1.0.0.1160.macosx-x86_64/Canopy.app/Contents/lib']Enthought 用です。
  • Fallback_library_path は Canopy で定義されているため、DEFAULT_LIBRARY_FALLBACK( ['/Users/tim/lib', '/usr/local/lib', '/lib', '/usr/lib']) は調べられません。

DYLD_FALLBACK_LIBRARY_PATH を設定すると、これが機能します。

(Canopy 64bit)$ DYLD_FALLBACK_LIBRARY_PATH=/usr/lib python -c 'from ctypes.util import find_library; print find_library("c")'
/usr/lib/libc.dylib

これは誰かのバグのように感じます -- たぶん ctypes '。(フォールバック パスはフォールバックのみであるべきではありませんか?)

于 2013-06-12T19:00:22.457 に答える