在 linux 中安装 matplotlib 的问题

Posted

技术标签:

【中文标题】在 linux 中安装 matplotlib 的问题【英文标题】:Problems installing matplotlib in linux 【发布时间】:2014-05-13 11:24:25 【问题描述】:

我已经成功安装了 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 ../

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

【问题讨论】:

你可以尝试在 virtualenv 中工作 (virtualenv.readthedocs.org/en/latest) @daouzli 在virtualenv 中安装matplotlib 相当棘手,因为后端依赖项通常需要在系统范围内安装。由于 OP 使用的是 Ubuntu,因此安装 matplotlib 的最简单方法可能就是 $ sudo apt-get install python-matplotlib。如果 OP 绝对有必要在 virtualenv 中从源代码构建它,那么 this guide 可能会有所帮助。 @ali_m sudo 命令确实起到了作用,谢谢。但是知道为什么即使我拥有所有足够的权限它也无法创建文件? 检查/usr/local/lib/python2.7/dist-packages/ 的权限——几乎可以肯定它只能由root 写入。以“管理员”身份登录通常意味着您在sudoers 列表中,但并不意味着您的普通登录 shell 可以写入系统文件(这是一件非常好的事情!)。一般来说,我强烈建议不要使用 sudo 安装 Python 包,使用 pipeasy_installsetup.py。您可能会陷入真正的混乱,因为其他包管理器(例如 apt-get)不知道以这种方式进行的任何更改。 @ali_m 请将其发布为答案。我倾向于使用混合系统来安装 mpl,gui-toolkit 的东西在安装的系统范围内(就像 BLAS 公司一样),我在 venv 中安装 mpl、np、scipy、ipython ……(使用系统包) . 【参考方案1】:

我在我的机器上以管理员身份工作,并且(我认为)拥有读/写文件的所有权限

这确实是一个更适合SuperUser 的讨论,但问题是成为“管理员”并不意味着你认为它会做什么。在这一行:

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

root是目录的拥有者,最后的r-x表示其他用户只能读取和执行,不能写入这个目录(详见here)。

你能做什么?

    root 运行安装命令,例如$ sudo python setup.py install。这是不推荐!以这种方式安装系统范围的 Python 模块的问题是其他包管理器(例如apt-get)完全没有注意到以这种方式所做的任何更改,这往往会导致其他系统包的依赖关系混乱。

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

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

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

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

【讨论】:

很好的答案。我可能会在不久的将来某个时候使用那个符号链接技巧。我想知道破解 venv 给它一个要使用的包列表有多难...... 您的意思是自动生成指向系统站点包中特定目录的符号链接?使用 virtualenvwrapper,您可能可以在 post_mkvirtualenv 脚本中添加一些内容,前提是您确切知道需要链接的内容。 是的,我就是这么想的。我想要的主要用途是能够使用 pyside/pyqt/pygtk 的系统安装将科学 Python 堆栈放在虚拟环境中。 我也经常需要做这种事情,但到目前为止我还没有费心把脚本放在一起。 this 可能对 pyqt 方面有用。

以上是关于在 linux 中安装 matplotlib 的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 PyCharm 中安装 matplotlib 和 pyplot 时出错

R:在新的 Rstudio 预览版中安装 matplotlib

安装matplotlib

Python中安装numpy matplotlib scipy

在virtualenv中安装NumPy SciPy scikit-learn matplotlib

python中安装matplotlib出现问题,我是个菜鸟,求大神带我飞