【问题标题】:OS X - multiple python versions, PATH and /usr/localOS X - 多个 python 版本,PATH 和 /usr/local
【发布时间】:2010-11-25 21:55:09
【问题描述】:

如果你安装了多个版本的python(我目前有默认2.5,安装了3.0.1,现在安装了2.6.2),它会自动将东西放入/usr/local,它还会调整路径以包含@987654322 @,但是当 /usr/local 已经在 PATH 上,并且所有已安装的版本(除了默认的 2.5,在 /usr/bin 中)都在那里时,这有什么意义呢?我从.bash_profile 的PATH 中删除了python 框架路径,我仍然可以输入"python -V" => "Python 2.5.1""python2.6 -V" => "Python 2.6.2""python3 -V" => "Python 3.0.1"。只是想知道为什么将它放在/usr/local 中,并且还更改了 PATH。我做的好吗?谢谢。

此外,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 shebang 时,它将运行,而在/Applications/Python 2.6 中,Python Launcher 成为默认应用程序来运行.py 文件,它使用@ 987654336@ 和/Library/Frameworks/Python.framework/Versions/2.6/bin 被创建并添加到路径的前面,所以which python 将在那里获取python,并且#! /usr/bin/env python shebang 也将正常运行。

【问题讨论】:

  • python 的 virtualenv 包呢?这似乎是在一台机器上安装多个 python 的一种相当流行的方式。其他用户在他们的 os x 机器上做过吗?

标签: python macos path multiple-versions


【解决方案1】:

没有先验保证 /usr/local/bin 将保留在 PATH 上(尤其是它不一定会保留在 /usr/bin 的“前面!-”),因此安装程序确保特别需要的 /Library/.../bin 目录确实位于 PATH 上。另外,可能是 /Library/.../bin 有没有符号链接到 /usr/local/bin 的补充内容,尽管我相信最近的 Mac 标准 Python 发行版目前不是这种情况。

如果您知道您安排路径的方式以及您将使用的确切可执行文件集完全满足 /usr/local/bin 的要求,那么您可以删除 /Library /etc 目录当然是你自己的路径。

【讨论】:

  • 如果我删除了 Python 2.6 会怎样?我可以从 /Applications 和 /Library/..../Versions/2.6.2 中删除它,但是 /usr/local/ 呢?不会留下一堆损坏的符号链接吗?而且我不想在那里乱七八糟地试图挑选出 2.6.2 的..我不知道..
  • 是的,除非您使用带有“卸载”功能的发行版(我相信来自 python.org 的标准发行版),否则您必须专门删除(少数)2.6 特定的符号链接不会)——ls -l /usr/local/bin | grep 'Python.*2.6' 当然会很容易识别它们,所以没有“乱七八糟”或“试图挑选”。
  • @Mk12,是的,这将是一个完美的替代方案——当然,除非您的 /usr/local/bin 中安装了其他与不同 Python 版本无关的想法。
【解决方案2】:

我刚刚在我的 Mac 上注意到/遇到了这个问题。我的机器上有 Python 2.5.4、2.6.2 和 3.1.1,并且正在寻找一种可以随意在它们之间轻松切换的方法。那时我注意到可执行文件的所有符号链接,我在“/usr/bin”和“/usr/local/bin”中都找到了这些符号链接。我撕掉了所有非版本特定的符号链接,留下了 python2.5、python2.6 等,并编写了一个 bash shell 脚本,我可以以 root 身份运行该脚本来更改一个符号链接,用于将路径指向我选择的版本

'/Library/Frameworks/Python.framework/Versions/Current'

删除符号链接的唯一坏处是其他应用程序是否出于某种原因需要它们。我对创建这些符号链接的原因的看法类似于 Alex 的评估,安装程序正试图覆盖所有基础。我的所有版本都由安装程序安装,尽管我一直在尝试编译自己的版本以启用完整的 64 位支持,并且在编译和安装自己的版本时,您可以选择不创建符号链接或修改 PATH安装。

【讨论】:

    猜你喜欢
    • 2014-12-20
    • 2015-02-03
    • 2014-12-02
    • 2012-06-22
    • 2011-03-24
    • 2016-05-01
    • 1970-01-01
    相关资源
    最近更新 更多