在Linux中安装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 个回答
我在我的电脑上担任管理员(我想)拥有读取和写入文件的所有权限。
这个问题其实更适合在 SuperUser 上讨论,但问题在于,成为“管理员”并不一定意味着你想的那样。在这行代码中:
drwxrwsr-x 2 root staff 4096 Aug 20 2013 ./
root
是这个目录的拥有者,而最后的 r-x
表示其他用户只能读取和执行这个目录里的内容,而不能写入(想了解更多可以查看 这里)。
你可以做些什么?
以
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) 创建你的
virtualenv
时加上--system-site-packages
选项。使用这个选项,如果 Python 尝试import
一个在你virtualenv
的site-packages
目录中没有安装的模块,它会去系统范围的site-packages
中查找。这意味着你可以在virtualenv
中本地安装 matplotlib,并且它会在系统范围的site-packages
中找到所有的后端依赖。缺点是,如果你在本地和系统范围内都有同一个模块,你需要更小心地确认实际导入的是哪个版本。b) 创建你的
virtualenv
时加上--no-site-packages
选项,然后在系统范围的site-packages
目录中创建所需模块的符号链接。这篇博客文章提供了在virtualenv
中使用符号链接安装 matplotlib 的详细步骤。这个方法更复杂,但好处是你的virtualenv
几乎是完全自包含的,模块的import
来源也没有疑问。