通过Macports安装matplotlib basemap后,示例Python代码无法运行

1 投票
1 回答
2065 浏览
提问于 2025-04-17 04:25

我在使用 Mac OS X 10.6.8 的时候,安装了 Python 2.6,方法是通过 http://www.python.org/ 上的二进制安装包。自从 2011 年 3 月以来,我一直在用它配合 SciPy 和 Matplotlib 来做科学计算,一直没遇到什么问题。最近,我需要用到一个叫 Basemap 的 matplotlib 库。

我参考了这篇文章 https://modelingguru.nasa.gov/docs/DOC-1847,上面说安装 Basemap 库最简单的方法是通过 Macports(或者 Fink)。于是我尝试通过 Macports 来安装 Basemap。我执行了这个命令:

port install py-matplotlib-basemap

结果它似乎安装了很多东西,比如 Python 2.4 等等。所以我又用 Macports 试了一次,这次我用了:

port install py26-matplotlib-basemap 

因为我在用 Python 2.6。安装过程看起来没有问题。

现在我测试 Basemap 是否安装成功,运行了一段使用 Basemap 画图的 Python 代码。但是终端显示了以下内容,然后又回到了提示符:

Traceback (most recent call last):
File "basemap-test.py", line 1, in <module>
from mpl_toolkits.basemap import basemap
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/mpl_toolkits/basemap/__init__.py", line 45, in <module>
import _geoslib, netcdftime
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/_geoslib.so, 2): Symbol not found: _GEOSArea
Referenced from: /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/_geoslib.so
Expected in: dynamic lookup

这可能出什么问题了呢?我知道 Macports 会安装它自己的 Python 版本,不知道这是否会影响到这个问题。

1 个回答

4

正如你所提到的,MacPorts会安装自己版本的Python(默认情况下,安装在/opt/local/bin/python2.6)。如果你通过MacPorts安装一个Python包,比如basemap,通常你需要在MacPorts的Python环境下运行所有东西。不要尝试混合使用不同版本的Python。那些包含C扩展模块或者依赖其他包含C库的包,必须以与Python解释器构建方式兼容的方式来构建。来自python.org的Python 2.6安装包只支持32位,并且是为了兼容多个OS X版本而构建的。而MacPorts构建的版本在10.6系统上会尽可能是64位,并且只针对10.6系统进行优化。从长远来看,最安全和最简单的选择是切换到使用MacPorts的Python,确保你需要的所有包都是从MacPorts安装的。

撰写回答