【问题标题】:Install Python 3 to /usr/bin/ on macOS在 macOS 上将 Python 3 安装到 /usr/bin/
【发布时间】:2017-02-17 02:11:18
【问题描述】:

我使用自制软件安装了python2.x和python3.x,可执行的python路径如下:

$ which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python

$ which python3
/Library/Frameworks/Python.framework/Versions/3.5/bin/python3


在 python 代码中编写 shebang 以使其可在终端上运行,这太长而且不太干净:

#!/Library/Frameworks/Python.framework/Versions/2.7/bin/python OR
#!/Library/Frameworks/Python.framework/Versions/3.5/bin/python3


我更喜欢

#!/usr/bin/python OR
#!/usr/bin/python3

我的问题是,如何正确地将 macOS 上的 python 移动或重新安装到 /usr/bin 例如
/usr/bin/python OR /usr/bin/python3

而不是
/Library/Frameworks/Python.framework/Versions/2.7/bin/python /Library/Frameworks/Python.framework/Versions/3.5/bin/python3

【问题讨论】:

  • 也许只是创建一个到 /bin 的符号链接
  • 代替#!/Library/Frameworks/Python.framework/Versions/3.5/bin/python3试试#!/usr/bin/env python3

标签: python macos python-3.x path


【解决方案1】:

这在 Mac OS X El Capitan 上是不可能的,因为从那时起系统完整性保护就阻止了这种情况。更多信息Cannot create a symlink inside of /usr/bin even as sudo

【讨论】:

    【解决方案2】:

    /usr/bin/中创建符号链接

    打开终端并执行:

    $ sudo ln /Library/Frameworks/Python.framework/Versions/2.7/bin/python /usr/bin/python
    $ sudo ln /Library/Frameworks/Python.framework/Versions/3.5/bin/python3 /usr/bin/python3
    

    你现在可以做你想做的事了。

    编辑:不幸的是,您可以从其他答案中了解到,由于系统完整性保护,此解决方案不再适用于 MacOS >= El Capitan。 (See here)

    一种可能的替代方法是使用应该可以访问的文件夹/usr/local/bin

    【讨论】:

    • $ sudo ln /Library/Frameworks/Python.framework/Versions/3.7/bin/python3 /usr/bin/python3 密码:ln: /usr/bin/python3: Operation not allowed
    • @WINSergey 正如您从 MDr 中看到的答案,我的解决方案不再适用于 MacOS >= El Capitan。
    • 是的@luca-angioloni,在我的案例中是:/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7
    • @WINSergey 我也更新了我的答案来解决你的问题。
    • 使用:/usr/local/bin/python3
    【解决方案3】:

    OP 中的基本问题似乎不可行,因为较新的 Mac OS 具有“系统完整性保护”,可防止对关键目录(例如 /usr/bin)进行“未经授权”的更改,而 sudo 无法覆盖它。

    使用/usr/local/bin/usr/local/Frameworks 的建议似乎应该可行(我还没有尝试过)。但是,在https://opensource.com/article/19/5/python-3-default-mac,Matthew Broberg 表示更新时可能会产生问题。

    在同一篇文章中,Moshe Zadka 建议使用 pyenv 来管理 Python 环境并使用 shell 别名而不是符号链接。

    我打算使用上面的/usr/local 建议,但是发现了这个禁忌症,我将尝试 Moshe 的方法。如果我遇到任何障碍,我会在这里报告。

    更新:我遵循了该方法,但仍然没有找到 pip 并且 which pythonpython -V 没有给我预期的结果。嗬!我跑了:

    . ~/.bash_profile

    (我在其中放置了推荐的 eval "$(pyenv init -)" 命令),突然间一切都按预期找到了路径和版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-03
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多