3

我在我的 sl mbp 上安装 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

当我明确地将 libxml2 dll 构建为 32 位时,该错误就会消失,但是由于其他一些库不是 32 位,因此 libxslt 将无法构建。我害怕继续拉那根绳子。所以问题是-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 安装 pre-reqs

sudo port install py26-libxml2 py26-twisted py26-openssl py26-simplejson py26-setuptools python_select
sudo python_select python26

测试是否选择了正确的 python: run $ 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 的详细回复。

4

4 回答 4

5

从您的回溯中的路径来看,您似乎已经安装并正在尝试使用 python.org python 2.6.4(安装到/Library/Frameworks/Python.frameworks...)。那个python只有32位。默认情况下,MacPorts 在 10.6 上尝试安装 64 位版本的软件包。您可以通过+universal在 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

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

+bash_completion +quartz +ssl +no_x11 +no_neon +no_tkinter +universal +libyaml -scientific

编辑:如果 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变体,否则您可能只会看到单个 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 ...

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

$ sudo rm -r /opt/local

并下载 MacPorts 10.6 安装程序。但你真的不应该这样做。而且我认为修复此问题并使其正常工作确实符合您的最大利益,因为它可能会在将来为您省去很多麻烦。

于 2010-03-01T21:38:25.943 回答
1

我有一个小笔记要贡献。在尝试跟进这篇文章时,我从三个 Python 安装开始:

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

我的麻烦是:

$ python

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

$ sudo python_select python26

我什至删除了仅导致错误的 2.7 版本。

我发现我需要使用以下命令将默认路径更改为 Macports 版本:

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

然后重新启动端口等。

最后,我无法通过这些说明默认引用scrapy-ctl.py文件,所以我不得不直接引用scrapy-ctl.py文件

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

更新

这篇文章的快速附录,其中包含创建链接的说明,可在 Scrapy 网站(#2 和 #3)上找到。

从 #2 开始,“将 Scrapy 添加到您的 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,“使scrapy命令可用”

sudo ln -s /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/scrapy-ctl.py /usr/local/bin/scrapy
于 2010-09-08T00:44:54.727 回答
0

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

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

我收到错误消息并停止

AttributeError: 'NoneType' object has no attribute 'get'

相反,我从头开始构建 Scrapy,效果很好。

那我试试你写的

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

还是在别的地方?

于 2010-03-04T11:22:59.120 回答
0

感谢@Ned Deily

如果您想在 OS X 10.6 上运行 Scrapy 0.8,这些步骤似乎有效。它使用 Macports 安装的 Python 2.6,而不是与操作系统捆绑的那个。步骤假定尚未安装 Macports。

从这里获取最新的 MacPorts 安装程序并安装:

http://www.macports.org/install.php

sudo port install py26-libxml2 py26-twisted py26-openssl py26-simplejson py26-setuptools python_select

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

将您的 ~.profile 更改为:

export     PATH=/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:$PATH
于 2010-03-04T16:02:46.087 回答