我不能让scipy在32位模式下运行,当编译为i386/x86_64通用二进制文件并在我的64位10.6.2 MacPro1,1上执行时。在
在this answer的帮助下,我构建了一个32/64位的intel universal binary of Python2.6.4,目的是使用arch
命令在架构之间进行选择。(我设法用lipo为我想要的几个库制作了一些通用的二进制文件。)所有这些都可以。然后,我按照hyperjeff's article上的说明安装了scipy,只安装了更为更新的numpy(1.4.0),并且在安装scipy的过程中跳过了将numy移到一边的一点。在
现在,除了scipy之外的所有功能似乎都在工作,而且我确实可以使用arch -i386 python
和arch -x86_64 python
在32位和64位模式之间进行选择。在
Scipy在32位模式下抱怨:
$ arch -x86_64 python -c "import scipy.interpolate; print 'success'"
success
$ arch -i386 python -c "import scipy.interpolate; print 'success'"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/interpolate/__init__.py", line 7, in <module>
from interpolate import *
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/interpolate/interpolate.py", line 13, in <module>
import scipy.special as spec
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/__init__.py", line 8, in <module>
from basic import *
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/basic.py", line 8, in <module>
from _cephes import *
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/_cephes.so, 2): Symbol not found: _aswfa_
Referenced from: /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/_cephes.so
Expected in: flat namespace
in /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/_cephes.so
看起来像scipy.插值导入名为_cephes
的内容,它查找名为_aswfa_
的符号,但在32位模式下找不到它。在浏览scipy的源代码时,我在specfun.f中找到了一个ASWFA
子例程斯派芬。所以但这两个和_塞菲斯似乎是通用二进制文件:
呵呵。我卡住了。我可能会尝试,但还没有弄清楚如何包括编译斯派芬。所以我自己,不知怎么的。在
我想scipy并不是所有32位机器都坏了,所以我猜我安装它的方式有问题,但我不知道是什么原因。在
考虑到我的独特之处,我真的不希望得到完整的答案但如果有人能给我指明方向,他们会非常感激的。在
我使用的是gfortran(gnufortran,来自gcc4.2.1appleinc.build5646)。在
Python 2.6.4的安装大致如下:
cd /tmp
curl -O http://www.python.org/ftp/python/2.6.4/Python-2.6.4.tar.bz2
tar xf Python-2.6.4.tar.bz2
cd Python-2.6.4
# Now replace buggy pythonw.c file with one that supports the "arch" command:
curl http://bugs.python.org/file14949/pythonw.c | sed s/2.7/2.6/ > Mac/Tools/pythonw.c
./configure --enable-framework=/Library/Frameworks --enable-universalsdk=/ --with-universal-archs=intel
make -j4
sudo make frameworkinstall
scipy0.7.1的安装与here差不多,但它可以归结为一个简单的sudo python setup.py install
。在
如果您查看带有nm
的uCephes库,那么在i386体系结构中该符号确实是未定义的,正如David Cournapeau所建议的:
$ nm -arch x86_64 /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/_cephes.so | grep _aswfa_
00000000000d4950 T _aswfa_
000000000011e4b0 d _oblate_aswfa_data
000000000011e510 d _oblate_aswfa_nocv_data
(snip)
$ nm -arch i386 /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/_cephes.so | grep _aswfa_
U _aswfa_
0002e96c d _oblate_aswfa_data
0002e99c d _oblate_aswfa_nocv_data
(snip)
然而,我还不能解释它的缺失。在
你是如何安装scipy的?python版本是什么?用哪个fortran编译器?在
您可能还需要检查丢失的符号是否确实在两个拱门中(我不记得函数在哪里,但是您应该能够很容易地使用nm/otool的组合来找到ti)。在
你试过用macports编译scipy吗?在
(当然,您必须使用相同的选项编译链的其余部分,
python
,py26-numpy
)我得到:
^{pr2}$然后,您可以使用macports维护人员用于自己编译的设置和知识。在
相关问题 更多 >
编程相关推荐