我需要32位libxml2用于雪豹上的python吗?

2024-09-27 23:28:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我花了很长时间在我的slmbp上安装scrapy。它需要libxml2,所以我开始安装它。从macports安装它似乎不会降低python绑定。在

通过scrapy的指令(here)从源代码安装它确实安装了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

当我显式地将libxml2dll构建为32位时,这个错误就消失了,但是libxslt不会构建,因为其他一些库不是32位的。我不敢再拉那根绳子了。所以问题是——python是32位的吗?我在这里做蠢事吗?在

编辑-这是python2.6

编辑2-根据大众需求,我在这里整合@Ned Deily的精彩答案。所有的功劳都归功于他,我只是根据他的回答发布了我所采取的步骤:

如果你一直在摆弄mac端口,(而且没有通过它们安装任何你需要的东西),那么就用核弹吧。在

^{pr2}$

将以下内容添加到/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

安装废料的预先要求

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的链接。在

测试是否存在正确的体系结构:run 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

测试libxml是否成功安装

$ python -c 'import libxml2'

如果一切顺利,你就不会得到任何产出。在

安装碎屑

sudo /opt/local/bin/easy_install-2.6 scrapy

在街上跑来跑去(全副武装)庆幸一切都完成了。再次感谢内德的详细回应。在


Tags: installnoimportbinlocalsudofilescrapy
3条回答

从回溯中的路径来看,您似乎已安装并正在尝试使用python.org网站Python2.6.4(安装到/Library/Frameworks/Python.frameworks…)。那个python只有32位。默认情况下,在10.6上,MacPorts会尝试安装64位版本的软件包。您可以通过在MacPorts安装命令中指定+universal变量或将其添加到/opt/local/etc/macports/variants.conf中,来更改大多数MacPorts包的这一点。但是,由于您需要各种各样的软件包,如果您只需要为您自己的机器安装一个完整的python2.6 64位解决方案,您可能会发现使用MacPorts安装一个完整的python2.6 64位解决方案要容易得多。除了scrapy本身,您应该已经找到了您需要的几乎所有包。您需要修改您的$PATH,将/opt/local/Library/Frameworks/Python.framework/Versions/2.6/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

编辑:对于10.6,由于64位模式下缺少Tk支持的一些问题,Tk默认为X11版本,您可能既不想要也不需要。我在10.6的/opt/local/etc/macports/variants.conf中添加了以下变体(并非所有变体都适用于python和friends):

^{pr2}$

编辑:如果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

如果您添加了+universal变体,否则您可能只看到一个x86u64或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 ...

您可能需要编辑您的~/.bash_profile或其他shell文件,使该更改成为“永久性的”。如果希望裸的python命令引用MacPorts Python,请确保运行上面显示的python_select命令。如果您仍然有问题,MacPorts的一个优点是很容易删除并重新开始;只需:

$ sudo rm -r /opt/local

下载MacPorts10.6安装程序。但你真的不应该那么做。我认为这将是你的最佳利益得到修复和工作,因为它可能会节省你很多头痛在未来。在

正在尝试安装,但仍在挣扎。 当我:

sudo /opt/local/bin/easy_install-2.6 scrapy

我收到错误信息,它就停止了

^{pr2}$

取而代之的是,我从头开始做的很好。在

那我试试你写的

cd /path/to/scrapy
sudo /opt/local/bin/python2.6 setup.py install

/path/to/scrapy在哪里?这是:

/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/scrapy-ctl.py

或者

/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/Scrapy-0.8-py2.6.egg

还是在别的地方?在

我有一张小纸条要投稿。在试图继续这篇文章时,我首先安装了三个Python:

  1. 默认的applepython2.5.1位于:/usr/bin/Python
  2. 位于:/Library/Frameworks的版本/Python.framework/Versions/2.7条
  3. Macport版本位于:/opt/local/bin/python2.6

我的问题是:

$ python

当我需要使用Macports版本时,它总是默认为2.7。以下情况没有帮助:

^{pr2}$

我甚至删除了只导致错误的2.7版本。在

我发现我需要使用以下方法更改Macports版本的默认路径:

$ PATH=$PATH\:/opt/local/bin ; export PATH

然后重新初始化端口等

最后,我没能参考到那篇文章-控制打印文件默认通过这些说明,所以我不得不参考的碎片-控制打印直接归档

/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/scrapy-ctl.py

更新

这篇文章的一个快速补遗,包含创建链接的说明,找到了on the Scrapy site(#2和#3)。在

从#2开始,“将碎片添加到Python路径”

sudo ln -s /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/scrapy-ctl.py /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scrapy

和#3,“使垃圾命令可用”

sudo ln -s /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/scrapy-ctl.py /usr/local/bin/scrapy

相关问题 更多 >

    热门问题