自从我升级到Yosemite以来,我遇到了编译(某些)模块(特别是使用C扩展的模块,即:Cython)的问题。
我问了一个相关问题here,最终结果是this github issue和我使用的虚拟环境管理器。然而,从那时起,所述管理器的创建者{3}导致Python传递给C编译器的标志发生了一些变化。
我将总结观察到的变化。在Python 2.7.7及更早版本中,可以在OSX Yosemite上观察到以下内容:
python -c 'import sysconfig;print(sysconfig.get_config_var("BLDSHARED"))'
clang -bundle -bundle_loader python.exe -L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/Users/yyuu/.pyenv/versions/2.7.7/lib
在2.7.8及更高版本中,可以观察到此:
python -c 'import sysconfig;print(sysconfig.get_config_var("BLDSHARED"))'
clang -bundle -undefined dynamic_lookup -L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/Users/yyuu/.pyenv/versions/2.7.8/lib
我已经测试了这个独立的virtualenv经理。考虑到我尝试安装带有C扩展名的包时出现错误消息,问题非常清楚:
ld: file not found: python.exe
所以现在我的问题是:我没有太多期望/想要'修复',而是了解导致这种变化的原因。 Python用什么来确定输出?什么是BLDSHARED
派生自?如果我理解这一点,那么也许我可以设计一个解决方案。我想这与Python如何检测它正在构建的环境有关。
当然也可以接受修复,而不是更好的理解:)