Enthought Canopy:cytpes.util.find_library找不到libc

时间:2013-06-12 18:33:30

标签: python macos virtualenv ctypes enthought

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

为什么呢?我如何使这项工作?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

这似乎来自ctypes.macholib.dyld.dyld_default_search中的这个逻辑:https://gist.github.com/tdsmith/5768065

  • 框架对于两个Pythons都是None
  • 对于系统Python,fallback_library_path为[],对于Enthought为<{1}}
  • 因为在Canopy中定义了fallback_library_path,所以不会检查DEFAULT_LIBRARY_FALLBACK(['/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'])。

设置DYLD_FALLBACK_LIBRARY_PATH使这项工作:

['/Users/tim/lib', '/usr/local/lib', '/lib', '/usr/lib']

我觉得这是某人的错误 - 也许是ctypes'。 (回退路径不应只是后备吗?)