最近,用Mac系统开发了一阵以后,一些软件开始崩溃,找了一下原因,原来是我乱升级系统包导致的,我们都知道,OSX系统默认是开发者友好的,python当然必须系统自带的。
但是网上又有很多教程,如何在mac系统中安另一个python,原因就是系统自带的python运行运行普通脚本没问题,但是真的开发python项目是有点问题的。
系统自带的python可能会版本偏低,这个如果大家都是用最新系统应该都没啥问题了。
系统升级的时候,可能会导致已经安装的python包消失。
最后也是最重要一点,系统python默认安装了一些python packages,导致我们自己安装升级这些库的时候很困难。
系统python默认安装的库在哪里?
我们都知道,python查找库路径使用的是sys.path
那么我们来看看系统python的sys.path
$ /usr/bin/python
Python 2.7.5 (default, Mar 9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print 'n'.join(sys.path)
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload
/Users/mb312/Library/Python/2.7/lib/python/site-packages
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC
/Library/Python/2.7/site-packages
重点可以看这两个路径:
1. 路径一:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
2. 路径二:/Library/Python/2.7/site-packages
如果你的系统是10.9以上的话,你应该可以看到路径一中,已经安装了很多库。 如果我们自己安装的库的话,会被安装在路径二中。 有意思的是,路径一在路径二上面,优先级要高,意味着我们自己无论如何安装也没办法升级默认安装好的库。
唯一的办法可能就是删除系统默认的库文件,等等,删除真的可以么?
OSX系统为什么要安装一些默认库?
因为OSX系统中有一些系统任务是使用系统python运行的。如果我们随意修改这个默认python或者默认python库版本,都可能会导致一些意想不到的系统错误。
要么重新安装一个python,要么使用virtualenv
重新安装
这里就不多说了,网上教程很多下面,列举几个。值得注意的是,千万别把/usr/bin/python改成自己的。最好的办法是修改自己的.profile. 增加如下脚本:export PATH=/usr/local/bin:/usr/local/sbin:$PATH