kol*_*osy 3 python macos libxml2 osx-snow-leopard
我有一段时间在我的sl mbp上安装scrapy了.它需要libxml2,所以我开始安装它.从macports安装它似乎没有拉下python绑定.
通过scrapy的说明从这里安装它(这里)确实安装了python绑定,但是当我运行'python -c"时导入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
Run Code Online (Sandbox Code Playgroud)
当我明确地将libxml2 dll构建为32位时,该错误就会消失,但是由于某些其他库不是32位,因此libxslt将无法构建.我害怕继续拉着那根绳子.所以问题是 - 只有python 32bit吗?我在这里做些蠢事吗?
编辑 - 这是python 2.6
编辑2 - 按流行需求,我正在巩固@Ned Deily在这里的精彩回答.所有归功于他,我只是根据他的回答发布我采取的步骤:
如果你一直在使用mac端口,(并且没有通过它们安装任何其他你需要的东西),请将它们核对.
$ sudo rm -r /opt/local
Run Code Online (Sandbox Code Playgroud)
添加以下内容以/opt/local/etc/macports/variants.conf防止使用下一个命令下载整个unix库
+bash_completion +quartz +ssl +no_x11 +no_neon +no_tkinter +universal +libyaml -scientific
Run Code Online (Sandbox Code Playgroud)
安装macports版本的python
$ sudo port install python26
Run Code Online (Sandbox Code Playgroud)
安装scrapy的预先要求
sudo port install py26-libxml2 py26-twisted py26-openssl py26-simplejson py26-setuptools python_select
sudo python_select python26
Run Code Online (Sandbox Code Playgroud)
测试选择了正确的python:run $ which python,应该说'/ opt/local/bin/python'的行,并且它本身应该是/opt/local/bin/python2.6的链接.
测试是否存在正确的体系结构:运行file 'which python'(单引号应该是反引号,应该吐出(对于运行10.6的intel 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
Run Code Online (Sandbox Code Playgroud)
测试libxml安装成功
$ python -c 'import libxml2'
Run Code Online (Sandbox Code Playgroud)
如果一切顺利,你应该没有输出.
安装scrapy
sudo /opt/local/bin/easy_install-2.6 scrapy
Run Code Online (Sandbox Code Playgroud)
穿过街道(穿着衣服)欣喜地说一切都完成了.再次,感谢ned的详细回复.
从traceback中的路径,它似乎已安装并正在尝试使用python.org python 2.6.4(安装到/Library/Frameworks/Python.frameworks...).那个python只有32位.默认情况下,10.6,MacPorts尝试安装64位版本的软件包.您可以通过+universal在MacPorts安装命令上指定变体或将其添加到大多数MacPorts包来更改/opt/local/etc/macports/variants.conf.但是,由于您需要各种软件包,如果您只需要自己的机器,您可能会发现使用MacPorts安装完整的python2.6 64位解决方案要容易得多.除了scrapy本身,你应该找到你需要的几乎所有包.你需要修改你的$ PATH添加/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin和/opt/local/bin之前他们与Python任何其他目录.像这样的东西应该工作(未经测试!):
sudo port selfupdate # ensure you have the latest ports file information
sudo port install py26-libxml2 py26-twisted py26-openssl py26-simplejson py26-setuptools python_select
sudo python_select python26 # optionally make /opt/local/bin/python -> python2.6
sudo /opt/local/bin/easy_install-2.6 scrapy
# or install manually
cd /path/to/scrapy
sudo /opt/local/bin/python2.6 setup.py install
Run Code Online (Sandbox Code Playgroud)
编辑:对于10.6,由于在64位模式下缺少Tk支持的一些问题,Tk默认为您可能既不想要也不需要的X11版本.我/opt/local/etc/macports/variants.conf为10.6 添加了以下变体(并非所有变体都适用于python和朋友):
+bash_completion +quartz +ssl +no_x11 +no_neon +no_tkinter +universal +libyaml -scientific
Run Code Online (Sandbox Code Playgroud)
编辑:如果MacPorts安装正确,你应该在10.6上看到这样的东西:
$ ls -l /opt/local/bin/python2.6
lrwxr-xr-x 1 root wheel 73 Oct 28 20:25 /opt/local/bin/python2.6@ -> /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6
$ file /opt/local/bin/python2.6
/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
Run Code Online (Sandbox Code Playgroud)
如果您添加了+universal变体,那么您可能只看到一个x86_64或i386架构.
使用相对路径时,请确保shell $ PATH首先具有两个MacPorts目录:
$ echo $PATH
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin:/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin ...
Run Code Online (Sandbox Code Playgroud)
您可能需要编辑您的~/.bash_profile或其他shell文件以使该更改"永久".如果您希望bare python命令引用MacPorts Python,请确保运行python_select上面显示的命令.如果你仍然遇到问题,关于MacPorts的一个好处是很容易删除并重新开始; 只是:
$ sudo rm -r /opt/local
Run Code Online (Sandbox Code Playgroud)
并下载MacPorts 10.6安装程序.但你真的不应该这样做.而且我认为将这个问题固定下来并确保工作真的符合您的最佳利益,因为它可能会为您节省很多麻烦.
| 归档时间: |
|
| 查看次数: |
3165 次 |
| 最近记录: |