我想在OSX Lion中使用matplotlib
我通过macports安装了matplotlib,使用的python版本是2.7.1。
$ sudo port install py27-matplotlib py27-matplotlib-basemap
我写了一个简单的程序如下。
#!/usr/bin/python
# -*- coding: utf-8 -*-
from pylab import *
plot([1,2,3])
show()
但是这个程序运行不正常,错误日志显示“没有名为pylab的模块”。
然后我尝试了easy_install。
$ sudo easy_install matplotlib
在这种情况下,我的程序正常运行,没有错误。
这两种情况(macports和easy_install)有什么区别呢?
我觉得这两种情况下matplotlib的版本是一样的。
在macports的情况下,我需要重新定义包含路径吗?
你能帮我吗??
2 个回答
正如Ned Deily提到的,这个问题是因为MacPorts会安装一个独立的Python版本,而Mac电脑本身就自带了一个Python。
我建议你使用Homebrew,而不是MacPorts,这样可以避免类似的问题。Homebrew会尽量使用Mac自带的包。
另一个建议是,最好使用pip
来管理Python包。它是easy_install
的替代品,并且支持卸载包。使用像MacPorts或Debian的apt
这样的包管理系统来管理Python包的好处在于,它们可以解决一些Python包依赖的其他C库问题。不过,如果某些Python包不在MacPorts或apt
中,你就需要使用easy_install
或pip
。通常同时使用两个包管理系统来管理你的Python包并不是个好主意。
为了确保环境兼容,MacPorts 的 Python 包会自动安装一个 MacPorts 版本的 Python。默认情况下,你可以通过 /opt/local/bin/python2.7
来使用它。在这里,你会找到 MacPorts 安装的 matplotlib
等库。而 /usr/bin/python
则会调用苹果自带的系统 Python 2.7.1。当你运行 sudo easy_install
时,其实是在使用苹果自带的 easy_install
命令,这个命令是和系统 Python 关联的。这就意味着你现在有两个 Python 2.7 的版本,每个版本都有自己独立的 matplotlib
。这并没有什么问题,但你可能更希望只使用其中一个。你可以通过确保你的 SHELL 路径中 /opt/local/bin
在 /usr/bin
之前,并使用 MacPorts 的 port select python python27
命令来将 MacPorts 的 Python 2.7 设置为默认版本。