OS X - 多个Python版本、PATH与/usr/local
如果你安装了多个版本的Python(我现在有默认的2.5,安装了3.0.1,现在又安装了2.6.2),系统会自动把一些东西放到/usr/local
目录下,并且还会调整路径,让/Library/Frameworks/Python/Versions/theVersion/bin
也包含在内。但是,既然/usr/local
已经在路径里了,所有安装的版本(除了默认的2.5,它在/usr/bin
里)都在这里,那这样做有什么意义呢?我把Python框架的路径从我的.bash_profile
中删除了,结果我仍然可以输入"python -V" => "Python 2.5.1"
,"python2.6 -V" => "Python 2.6.2"
,"python3 -V" => "Python 3.0.1"
。我只是想知道为什么它要把东西放到/usr/local
,还要改变路径。我这样做可以吗?谢谢。
另外,2.6的安装让它成为了“当前”版本,.../Python.framework/Versions/Current
指向2.6。所以在/usr/local/bin
里的普通'python'指向2.6,但这没关系,因为/usr/bin
在前面,里面同名的东西指向2.5。总之,2.5是随Leopard系统自带的,我安装3.0.1只是为了有最新版本(有dmg文件),现在我又安装了2.6.2来使用pygame。
编辑:好的,我理解是这样的。当你安装,比如说,Python 2.6.2时:会在/usr/local/bin
添加一堆符号链接,这样当Python脚本里有#! /usr/local/bin/python
这样的开头时,它就会运行。而在/Applications/Python 2.6
里,Python启动器被设为默认应用来运行.py文件,它使用的是/usr/local/bin/pythonw
,同时/Library/Frameworks/Python.framework/Versions/2.6/bin
被创建并添加到路径的最前面,所以当你输入which python
时,会找到那里的Python,#! /usr/bin/env python
这样的开头也能正确运行。
2 个回答
我刚在我的Mac上发现了一个问题。我机器上装了Python 2.5.4、2.6.2和3.1.1,想找个简单的方法随意切换这些版本。于是我注意到在'/usr/bin'和'/usr/local/bin'里有很多指向这些可执行文件的符号链接(symlink)。我把所有不带版本号的符号链接都删掉了,留下了像python2.5、python2.6这样的链接,然后写了一个bash脚本,可以用管理员权限运行,来更改一个我常用的符号链接,这样就能指向我想用的Python版本。
这个符号链接指向的是:
'/Library/Frameworks/Python.framework/Versions/Current'
不过,删掉这些符号链接的唯一坏处就是,如果其他应用程序需要用到它们就麻烦了。我觉得这些符号链接的存在是因为安装程序想要兼顾所有情况。我的所有Python版本都是通过安装程序安装的,虽然我也在尝试自己编译一个,以便完全支持64位。在自己编译和安装的时候,可以选择不创建符号链接或者不修改安装时的路径(PATH)。
没有人能保证 /usr/local/bin 会一直在你的路径中(尤其是它不一定会在 /usr/bin 的前面!),所以安装程序确保特定需要的 /Library/.../bin 目录能够加入路径是很合理的。此外,/Library/.../bin 可能有一些额外的内容没有被链接到 /usr/local/bin,虽然我相信在最近的 Mac 标准 Python 版本中并不是这样。
如果你知道自己会如何安排路径,以及你使用的可执行文件完全来自 /usr/local/bin,那么当然可以把 /Library/etc 目录从你的路径中去掉。