在 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 包,使用 pip
、easy_install
或 setup.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
一个未本地安装在您的 virutalenv
的 site-packages
目录中的模块,它将在系统范围内的 site-packages
中查找。这意味着您可以在 virtualenv
本地安装 matplotlib,它会在系统范围的 site-packages
中找到其所有后端依赖项。不利的一面是,如果您在本地和系统范围内都安装了相同的模块,则必须更加小心实际正在导入的版本。
b) 使用--no-site-packages
标志创建您的virtualenv
,然后在系统范围的site-packages
目录中创建指向所需模块的符号链接。 This blog article 提供了一套很好的说明,用于使用符号链接在 virtualenv
中安装 matplotlib。这种方法比较棘手,但优点是您的 virtualenv
(几乎!)完全独立,毫无疑问您的模块 import
s 来自哪里。
【讨论】:
很好的答案。我可能会在不久的将来某个时候使用那个符号链接技巧。我想知道破解 venv 给它一个要使用的包列表有多难...... 您的意思是自动生成指向系统站点包中特定目录的符号链接?使用 virtualenvwrapper,您可能可以在post_mkvirtualenv
脚本中添加一些内容,前提是您确切知道需要链接的内容。
是的,我就是这么想的。我想要的主要用途是能够使用 pyside/pyqt/pygtk 的系统安装将科学 Python 堆栈放在虚拟环境中。
我也经常需要做这种事情,但到目前为止我还没有费心把脚本放在一起。 this 可能对 pyqt 方面有用。以上是关于在 linux 中安装 matplotlib 的问题的主要内容,如果未能解决你的问题,请参考以下文章
在 PyCharm 中安装 matplotlib 和 pyplot 时出错
R:在新的 Rstudio 预览版中安装 matplotlib
Python中安装numpy matplotlib scipy