按照 Scrapy 的说明(这里)从源代码安装可以安装 Python 绑定,但是当我运行 'python -c "import libxml2"' 时,出现了架构不匹配的错误:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "libxml2.py", line 1, in <module>
import libxml2mod
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site- packages/libxml2mod.so, 2): no suitable image found. Did find:
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site- packages/libxml2mod.so: mach-o, but wrong architecture
当我显式构建libxml2 dlls为32位时,该错误消失了,但是libxslt无法构建,因为某个其他库不是32位。我害怕继续拉这个线。所以问题是 - Python只有32位吗?我在这里做了什么愚蠢的事情吗?
编辑 - 这是Python 2.6
编辑2 - 根据大家的要求,我正在整合@Ned Deily的精彩答案。所有功劳都归于他,我只是根据他的回答发布了我的步骤:
如果你一直在搞mac端口(并且没有安装任何其他必需的东西),就把它们清除掉。
$ sudo rm -r /opt/local
将以下内容添加到
/opt/local/etc/macports/variants.conf
中,以防止在下一个命令中下载整个Unix库。+bash_completion +quartz +ssl +no_x11 +no_neon +no_tkinter +universal +libyaml -scientific
安装MacPorts版本的Python。
$ sudo port install python26
安装Scrapy的先决条件。
sudo port install py26-libxml2 py26-twisted py26-openssl py26-simplejson py26-setuptools python_select
sudo python_select python26
测试选择了正确的Python版本:运行$ which python
,应该会显示类似于“/opt/local/bin/python”的内容,这本身应该是指向/opt/local/bin/python2.6的链接。
测试是否存在正确的架构:运行file 'which python'
(单引号应该改为反引号),它应该会输出以下内容(适用于运行10.6的英特尔Mac电脑):
/opt/local/bin/python2.6: Mach-O universal binary with 2 architectures
/opt/local/bin/python2.6 (for architecture x86_64): Mach-O 64-bit executable x86_64
/opt/local/bin/python2.6 (for architecture i386): Mach-O executable i386
测试libxml是否安装成功
$ python -c 'import libxml2'
如果一切顺利,你不应该得到任何输出。
安装Scrapy。
sudo /opt/local/bin/easy_install-2.6 scrapy
穿着衣服在街上奔跑,庆祝一切都完成了。再次感谢Ned提供详细的回答。