在linux中安装matplotlib的问题

时间:2014-05-13 11:24:25

标签: python linux numpy matplotlib

我已经成功安装了numpy,我现在正在尝试安装matplotlib。我按照以下网站上的步骤进行操作:

http://matplotlib.org/faq/installing_faq.html#source-install-from-git

在以下命令之后发生错误:

python setup.py install

这是错误:

Checking .pth file support in /usr/local/lib/python2.7/dist-packages/
error: can't create or remove files in install directory                                     '

The following error occurred while trying to add or remove files in the installation directory:

    [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/test-easy-install-24752.pth'

The installation directory you specified (via --install-dir, --prefix, or the distutils default setting) was:

    /usr/local/lib/python2.7/dist-packages/

我在我的机器上担任管理员,(我认为)拥有读/写文件的所有权利:

administrator@ubuntu:/usr/local/lib/python2.7/dist-packages$ ll -a
total 8
drwxrwsr-x 2 root staff 4096 Aug 20  2013 ./
drwxrwsr-x 4 root staff 4096 Mar  9 11:04 ../

问题是什么,我该如何解决?

1 个答案:

答案 0 :(得分:3)

  

我在我的机器上担任管理员,(我认为)拥有读/写文件的所有权利

这真的是一个更适合SuperUser的讨论,但问题是成为一名管理员'并不真正意味着你的想法。在这一行:

drwxrwsr-x 2 root staff 4096 Aug 20  2013 ./

root是目录的所有者,最后r-x表示只允许其他用户读取和执行,而不是写入此目录(有关详细信息,请参阅here )。

你能做什么?

  1. root运行安装命令,例如$ sudo python setup.py install。这是不推荐!以这种方式安装系统范围的Python模块的问题是其他包管理器(例如apt-get)完全忘记了以这种方式进行的任何更改导致其他系统软件包出现乱七八糟的依赖关系。

  2. 从Ubuntu存储库安装软件包,即$ sudo apt-get install python-matplotlib。这可能是安装matplotlib的最简单方法,并且不太可能破坏任何依赖项。但是,Ubuntu存储库往往包含大多数Python软件包的旧版本。

  3. 将其安装到virtualenv。这是安全的,因为它不会影响全局site-packages中的任何内容,并且它允许您安装最新的最新版本。但是,将matplotlib安装到virtualenv可能会很棘手,因为matplotlib有很多后端依赖项,通常需要在系统范围内安装。要解决这个问题,您可以:

    a)使用virtualenv标记创建--system-site-packages。使用此选项,如果Python尝试import未在virutalenv site-packages目录中本地安装的模块,则会在系统中查找 - 宽site-packages。这意味着您可以在virtualenv中本地安装matplotlib,它将在系统范围site-packages中找到所有后端依赖项。缺点是,如果您在本地和系统范围内安装了相同的模块,则必须更加小心实际导入版本。

    b)使用virtualenv标志创建--no-site-packages,然后在系统范围的site-packages目录中创建指向所需模块的符号链接。 This blog article提供了一组很好的使用符号链接在virtualenv内安装matplotlib的说明。这种方法比较棘手,但优点是你的virtualenv(几乎!)是完全独立的,毫无疑问你的模块import来自哪里。