将Python 2.7.1与苹果自带Python并排安装

12 投票
3 回答
16769 浏览
提问于 2025-04-16 08:37

我刚刚从 Python.org 下载了 Python 2.7.1 的 DMG 文件。我看到有人建议使用 ActivePython,但我更喜欢从 Python.org 下载的版本。

  1. 如果我直接运行 DMG 文件里的 mpkg 安装程序,接受所有默认设置,它会和苹果自带的 Python 和谐共存吗?
  2. 如果我在终端输入 python,我会得到哪个版本?
  3. 在终端中,我怎么指定运行苹果自带的 Python?那我自己安装的 Python 呢?
  4. 关于安装不同版本的 Python 时设置 PATH 的说法是怎么回事?我知道 Python 安装程序会自动设置这些,但我还是想了解一下内部原理。我知道在 Windows 中怎么做(环境变量)。在 Mac OS X 中,我怎么调整 PATH

我也可以先自己试试,但我对 Mac 还不太熟悉。Python 的安装过程比较复杂,需要把文件写到不同的文件夹,还要配置像 PATH 这样的操作系统设置。如果我想恢复到干净的状态,TrashMe 或 AppCleaner 可能对卸载 Python 不太有效。因此,我想对我上面的问题有更清晰的了解。

3 个回答

1

不同的Python安装可以顺利运行,特别是如果你使用了virtualenv这个工具。

你可以参考以下文章:

  1. 如何创建虚拟环境
  2. 设置Python生态系统

这些文章会教你如何在不同的地方安装不同版本的Python,每个版本都有自己的库,这样你就可以在不同的项目中独立使用它们。我强烈建议你看看这些内容,因为它们还简单地解释了如何更改PATH变量,这样你的命令行就能找到不同的Python安装。

这里有一些关于不同Python安装位置的快速信息:

在终端输入which python可以告诉你Python的安装位置。你也可以用python -V来查看当前使用的版本。记住,pythonpython2.x可能是不同的东西。你可以给不同的Python安装起个合适的名字,这样在终端或脚本中调用它们时就更方便,可以使用alias命令。例如:

alias /Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 sys-py27
  • 苹果自带的系统Python安装在/System/Library/Frameworks/Python.framework/usr/bin/python

    • 实际上,你不应该试图手动删除这些文件,因为系统Python可能被你电脑上的其他软件使用。
    • 要检查当前的系统Python版本,你可以使用:

      python -c 'import sys;print(sys.version)'

  • 你下载并运行的打包安装程序通常会安装到/Library/Frameworks/Python.framework/Versions/2.7/bin/

    • 你可以手动删除Python.framework文件夹。如果你在应用程序文件夹中看到Python,可能还有IDLE、AppBuilder和PythonLauncher等其他东西,如果需要的话可以直接删除它们。
  • MacPorts会将Python或类似的python26和python27安装到/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/

    • 你可以使用常规的sudo port uninstall packageName来卸载它们,如果想要删除依赖项,可以使用类似下面的命令:

      sudo port uninstall python27 --follow-dependents installed

    • 你通过port安装的所有额外库,比如numpy、scipy、PIL、opencv等,都会放在:

      /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

4
  1. 是的,这样做是没问题的。
  2. 你需要更改相应的符号链接。你可以随时使用 which python 来检查。
  3. 你可以为不同的版本创建额外的符号链接(比如 python_macpython_standard)。
  4. 可以看看 这个链接
24

如果你在使用python.org的安装程序时没有更改默认的包,输入python命令应该会运行新安装的Python 2.7。 (你需要在运行安装程序后开启一个新的终端会话才能看到这个效果。)目前,python.org为OS X提供的安装程序会在你的应用程序目录下创建一个名为Python m.n的文件夹,具体名称取决于Python的版本。如果你查看/Applications/Python 2.7,你会看到一个叫Update Shell Profile.command的文件。这个文件是一个脚本,你可以用编辑器或者快速查看工具打开它。它的作用是修改OS X上最常用的几种shell程序的启动文件(比如bashshcsh),确保新Python的可执行命令所在的目录被添加到PATH环境变量的最前面,这样当你输入python命令时,系统会先找到新安装的Python命令,而不是Apple自带的Python命令。默认情况下,安装程序会自动为你运行Update Shell Profile.command。这应该会产生类似这样的结果:

$ cat ~/.bash_profile
# .bash_profile
# ... other stuff

# Setting PATH for Python 2.7
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH

如果你查看那个目录,你应该会看到类似这样的内容:

$ ls -l /Library/Frameworks/Python.framework/Versions/2.7/bin
total 272
lrwxr-xr-x  1 root  admin      8 Nov 30 00:49 2to3@ -> 2to3-2.7
-rwxrwxr-x  1 root  admin    140 Nov 30 00:30 2to3-2.7*
lrwxr-xr-x  1 root  admin      7 Nov 30 00:49 idle@ -> idle2.7
-rwxrwxr-x  1 root  admin    138 Nov 30 00:30 idle2.7*
lrwxr-xr-x  1 root  admin      8 Nov 30 00:49 pydoc@ -> pydoc2.7
-rwxrwxr-x  1 root  admin    123 Nov 30 00:30 pydoc2.7*
lrwxr-xr-x  1 root  admin      9 Nov 30 00:49 python@ -> python2.7
lrwxr-xr-x  1 root  admin     16 Nov 30 00:49 python-config@ -> python2.7-config
-rwxrwxr-x  1 root  admin  33764 Nov 30 00:31 python2.7*
-rwxrwxr-x  1 root  admin   1663 Nov 30 00:31 python2.7-config*
lrwxr-xr-x  1 root  admin     10 Nov 30 00:49 pythonw@ -> pythonw2.7
-rwxrwxr-x  1 root  admin  33764 Nov 30 00:31 pythonw2.7*
lrwxr-xr-x  1 root  admin     11 Nov 30 00:49 smtpd.py@ -> smtpd2.7.py
-rwxrwxr-x  1 root  admin  18586 Nov 30 00:30 smtpd2.7.py*

新的Python可以通过命令python2.7来使用,同时也有一个指向它的符号链接,叫python。因为PATH环境变量已经被修改:

$ echo $PATH
/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

当你在shell中输入python命令时,这个符号链接会被优先找到,而不是Apple自带的python,后者位于/usr/bin,这是系统提供的用户命令安装的目录之一(比如在OS X 10.6上):

$ ls /usr/bin/py*
/usr/bin/pydoc*            /usr/bin/python-config*    /usr/bin/python2.6-config@
/usr/bin/pydoc2.5@         /usr/bin/python2.5@        /usr/bin/pythonw*
/usr/bin/pydoc2.6@         /usr/bin/python2.5-config@ /usr/bin/pythonw2.5@
/usr/bin/python*           /usr/bin/python2.6@        /usr/bin/pythonw2.6@

(注意,一般来说,你不应该尝试修改或删除/usr/bin中的文件,因为它们是OS X的一部分,由Apple管理。)

在OS X上管理多个Python安装有很多方法;你可以查看相关的资料或上网搜索。需要记住的一点是,你总是可以使用绝对路径来调用你想要的Python命令进行检查。因此,按照上面的修改路径,你应该会看到以下行为:

$ /Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 -c 'import sys;print(sys.version)'
2.7.1 (r271:86882M, Nov 30 2010, 09:39:13) 
[GCC 4.0.1 (Apple Inc. build 5494)]
$ python2.7 -c 'import sys;print(sys.version)'
2.7.1 (r271:86882M, Nov 30 2010, 09:39:13) 
[GCC 4.0.1 (Apple Inc. build 5494)]
$ python -c 'import sys;print(sys.version)'
2.7.1 (r271:86882M, Nov 30 2010, 09:39:13) 
[GCC 4.0.1 (Apple Inc. build 5494)]
$ /usr/bin/python -c 'import sys;print(sys.version)'
2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)]
$ /usr/bin/python2.6 -c 'import sys;print(sys.version)'
2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)]

撰写回答