0

经过一番努力,我终于得到了 matplotlib 及其所有依赖项,可以在 Snow Leopard 10.6.8 上和谐地工作。我现在想稍微调整一下它的配置,以允许我使用 32 位安装的 wxPython 作为它的后端。问题是当我使用 Python 2.7.3(python.org 版本)的 32 位安装时,不会导入 numpy(matplotlib 需要)。谷歌搜索一个小时左右让我相信,通过指定 CFLAGS 和 LDFLAGS 与 setup.py 结合使用,可以将 numpy 构建和安装为 32 位。我不清楚这些标志的作用,毫不奇怪我没有成功使用它们。这是我从下载的 numpy 文件夹中尝试的:

$ CLFLAGS=-m32 LDFLAGS=-m32 python setup.py install

我收到一些错误消息,但 numpy 的 64 位兼容版本确实到达了我的 sitepackages 文件夹。但是,当我使用 32 位解释器时,出现错误:

ImportError: dynamic module does not define init function (initmultiarray)

我认为我可以构建一个 32 位的 numpy 是否正确?

4

2 回答 2

4

我只是花了几天的时间环顾四周,把头发拉了出来,所以我想我会在这里为我的发现做出贡献……

我有同样的问题,但只是设置标志对我不起作用(但这确实需要)......在我的情况下,我有一个单独的 32 位版本的 python,所以我做了:

CFLAGS="-m32" LDFLAGS="-m32" /util/linux32/bin/python setup.py install --prefix=/util/science/gfortran-4.4.6/linux32/

(不用担心我在前缀中的 gfortran 东西,幸运的是我不得不测试不同的编译器.. ;))

但后来我会收到一个错误,最后一行会说:“RuntimeError: Broken toolchain: cannot link a simple C program”

但如果我向上滚动,我有:

gcc -pthread _configtest.o -o _configtest

_configtest.o:无法读取符号:文件格式错误

collect2: ld 返回 1 个退出状态

_configtest.o:无法读取符号:文件格式错误

collect2: ld 返回 1 个退出状态

失败。

删除:_configtest.c _configtest.o

如您所见,在 gcc 调用中没有“-m32”标志...

我将其追溯到 distutils install ;对我来说:/util/linux32/lib/python2.7/distutils/ccompiler.py

并且可能有比这更优雅的解决方案,比如直接获取 cflags 值,但我不是 python 女孩所以不知道如何.. ;) 我可能会弄清楚,但我现在关心的是最终安装numpy 在 32 位模式下.. 所以无论如何...这个 python 代码的第 693 行,我改变了

runtime_library_dirs=None, debug=0, extra_preargs=None,

runtime_library_dirs=None, debug=0, extra_preargs=['-m32'],

(在函数 link_executable 中;如果您有不同版本的 python...)

瞧... numpy 在 32 位模式下成功安装在 64 位机器上。我认为这也适用于其他模块,因为它与 distutils 相关,而不是 numpy .. ;)

希望这可以帮助将来的人并节省一些时间!

伊芙-玛丽

于 2013-04-19T16:39:29.977 回答
0

您可以尝试使用 EPD 的免费版本(如果您在学术界,完整版本是免费的):

http://www.enthought.com/products/epd_free.php/

这有一个 32 位版本的 mac,包含所有关键的科学堆栈包,包括 scipy、numpy 和 matplotlib。

于 2012-06-29T16:12:24.333 回答