【问题标题】:Install Python 2.7.1 side-by-side with Apple-supplied Python与 Apple 提供的 Python 并排安装 Python 2.7.1
【发布时间】:2011-05-26 12:18:00
【问题描述】:

我刚刚从Python.org 下载了 Python 2.7.1 DMG。我已经看到了获取 ActivePython 的建议,但我更喜欢 Python.org 提供的建议。

  1. 如果我只是在 DMG 中运行 mpkg 安装程序,接受所有默认设置,它会与 Apple 提供的 Python 和平相处吗?
  2. 如果我在终端中输入python,我会得到哪个?
  3. 在终端中,如何指定运行 Apple 提供的 Python?我自己安装的 Python 呢?
  4. 在安装不同的 Python 版本时设置PATH 是什么意思?我知道 Python 安装程序只会自动设置它。但我仍然想偷看引擎盖。我知道如何在 Windows(环境变量)中执行此操作。对于 Mac OS X,我该如何修改 PATH

我不妨先自己尝试一下,但我是 Mac 新手。 Python 是一个相当复杂的安装,将文件写入不同的文件夹并配置操作系统设置,如PATH。 TrashMe 或 AppCleaner 在卸载 Python 时可能不是很有效,如果我想回到一个干净的状态。因此,我想对上述问题有清晰的认识。

【问题讨论】:

  • 您能否接受答案或更新主题以说明为什么不接受答案?

标签: python macos osx-snow-leopard


【解决方案1】:

如果您在使用 python.org 安装程序时未更改默认软件包集,则从命令行键入 python 应该会运行新安装的 Python 2.7。 (运行安装程序后,您需要启动一个新的终端会话才能看到这一点。)当前适用于 OS X 的 python.org 安装程序会在您的应用程序目录中创建一个名为 Python m.n 的文件夹,具体取决于 Python 版本。如果您查看/Applications/Python 2.7,您会看到一个名为Update Shell Profile.command 的文件。这是一个shell脚本;您可以在编辑器中或使用 Quicklook 进行检查。其目的是修改 OS X 上最常见的 shell 程序的启动文件(bashshcsh),以确保将新 Python 的可执行命令所在的目录添加到PATH 环境变量中的目录列表,以便在找到 Apple 提供的 python 命令之前找到其中的 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)]

【讨论】:

    【解决方案2】:
    1. 是的,它可以正常工作。
    2. 您必须更改相应的符号链接。您可以随时使用which python 进行检查。
    3. 您可以为不同的版本创建额外的符号链接(例如 python_macpython_standard)。
    4. 阅读this

    【讨论】:

      【解决方案3】:

      如果您使用virtualenv,则可以使不同的python安装运行而没有特别的障碍

      你可以关注这些关于

      的文章
      1. bootstrapping virtual environments
      2. setting up python ecosystems

      这些将指导您在不同的地方安装不同版本的 python,每个地方都有自己的一组站点包,并让它们分别在不同的项目上工作。强烈建议您查看它,因为它还解释了如何以简单的方式更改 PATH 变量,以便您的 shell 命令可以找到不同的 python 安装。

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

      在终端输入which python 会告诉你它的位置。您也可以使用python -V 查看使用的版本。请记住,pythonpython2.x 可以是不同的东西。您可以使用alias 命令为不同的python 安装分配适当的名称,以便在终端或脚本中调用它们。例如,

      alias /Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 sys-py27
      
      • Apple 提供的系统 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 文件夹。您可能还会在 Applications 文件夹中看到 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-05
        • 2020-06-13
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-27
        相关资源
        最近更新 更多