0

shapely库尝试通过使用 ctypes.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

1

Tim,这是 Canopy 中的一个已知错误,将在下周发布的 1.0.3 中修复。

于 2013-06-18T18:16:39.977 回答
0

这似乎源于 ctypes.macholib.dyld.dyld_default_search 中的这种逻辑:https ://gist.github.com/tdsmith/5768065

  • 两个 Python 的 framework 都是 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 中定义,['/Users/tim/lib', '/usr/local/lib', '/lib', '/usr/lib']所以不检查 DEFAULT_LIBRARY_FALLBACK ( )。

设置 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 回答