2010-09-16 50 views
3

我的默认Python 2.6.1安装为/usr/bin/python,并安装了Python 3.1.2,安装在/usr/local/bin/python3.1。考虑到我只使用3.x语法,使用符号链接替换默认解释器(2.6)和3.1(包括python-config)(并删除旧的Python二进制文件)是否安全?或者是为了某种目的我不知道的依赖于2.x版本的系统?替换MacOS X默认Python解释器安全吗?

回答

8

如果你只使用Python 3,开始你的脚本:

#! /usr/bin/env python3.1 

你会使用正确的版本,没有doinking有关系统。

编辑:BTW这个想法是由Python文档建议的。每个脚本将运行他们所依赖的Python版本。由于Python 3不是向后兼容的,因此用一个会破坏其他实用程序可能依赖的脚本来替换Python可执行文件似乎很危险。

+6

更好的选择是使用'python3'而不是'python3.1'。然后,当Python 3.2,3.3等出来并安装,你不必回去,并记住改变这个和其他脚本。 – snapshoe 2010-09-26 18:41:10

1

除非您急需存储,否则不要替换/删除任何二进制文件。在这种情况下,去除它们的里程也很少。

你可以简单地使3.1默认使用:

defaults write com.apple.versioner.python Version 3.1 

还有其他的方法,以确保您使用3.1在默认情况下,我没有用他们虽然。

export VERSIONER_PYTHON_VERSION=3.1 
+0

是的,但我需要“python”命令来执行python3.1 ...我试过你的解决方案,没有一个(显然是恕我直言)改变了/ usr/bin/python二进制文件。 – 2010-09-16 02:12:34

+0

'defaults'技巧只能在10.6以及AFAICT中使用,仅适用于Apple提供的/ usr/bin中的Pythons 2.5和2.6。 (是的,这个手册页表明它适用于3.0,我猜测这个版本的计划在某一时刻是以10.6版本发布的,但没有发布)。而且,再次,在转换的这一点上让'python'引用一个Python 3实例是一个非常糟糕的主意。 'python3'应该被用作泛型引用。 – 2010-09-16 03:45:22

2

你不能安全地替换系统提供的python。我无法找到适合您的Mac专用引用,但是一些最新的Python版本不能向后兼容......许多依赖于较旧版本Python的脚本不能在升级后的python上运行。 OS X预装了Python,因为它依赖于它。

尝试使用VirtualEnv代替。

更新:刚刚遇到来自macports的python-select可能会解决您的问题。

+0

一般来说,MacPorts'python_select'只适用于安装了MacPorts的Pythons,虽然它在/ usr/bin(10.5为2.5和2.5,对于10.6为2.5)中使用默认Apple提供的Python。无论如何,只使用python_select进行Python框架安装通常是不够的;您需要小心地将默认框架bin包含在PATH中,以执行为该Python实例安装的脚本(假定您没有使用另一个Distutils安装方案(如--user))。 – 2010-09-16 04:00:22