在Mac OSX上Python的位置

148

我对 OS X 上的 Python 有些困惑。我不知道笔记本电脑的前任所有者是否使用 MacPort 安装了 MacPython。 我记得 OSX 有一个内置版本的 Python。我尝试使用 type -a python,结果返回:

python is /usr/bin/python
python is /usr/local/bin/python

但是在这些位置都运行Python后,我得到了[GCC 4.2.1 (Apple Inc. build 5646)] on darwin。它们是否都是指向mac提供的相同内置Python?

我还读到说安装MacPython后,会

     A MacPython 2.5 folder in your Applications folder. In here you
 find IDLE, the development environment that is a standard part of
 official Python distributions...

我查看了Applications目录,发现其中有一个MacPort文件夹,里面有python2.6和上面提到的东西。但是运行IDLE时,我发现与上面相同的消息。

嗯,我有点困惑。哪个是哪个?


小贴士:之前的主人是谁?如果你购买了一台二手电脑,只需重新安装操作系统即可清除所有之前用户的文件和应用程序。 - klys
13个回答

128

这个命令不仅可以在Mac上解决你的所有问题,还可以在Linux和其他基本的shell中找到。

TL;DR(你不必阅读整个答案 - 只需看前半部分)。
开始吧

在终端中运行:

which python3

在Mac上,您应该得到:
/usr/local/bin/python3

等等!!! 这可能是一个符号链接,你怎么知道?运行:

ls -al /usr/local/bin/python3 

如果你已经使用Brew安装了Python,你将会得到以下内容:

/usr/local/bin/python3 -> /usr/local/Cellar/python/3.6.4_4/bin/python3

这意味着你的

/usr/local/bin/python3 

实际上指向(真正的位置)

/usr/local/Cellar/python/3.6.4_4/bin/python3

就是这样!

更长的版本(可选): 如果由于某种原因,您的

/usr/local/bin/python3 

并不指向你想要的地方,这在我们的情况下是:

/usr/local/Cellar/python/3.6.4_4/bin/python3

只需备份它(+添加.orig后缀的酷技巧):

cp /usr/local/bin/python3{,.orig} 

并运行:

rm -rf /usr/local/bin/python3

现在创建一个新的符号链接:
ln -s /usr/local/Cellar/python/3.6.4_4/bin/python3 /usr/local/bin/python3 

现在你的

/usr/local/bin/python3

指向

/usr/local/Cellar/python/3.6.4_4/bin/python3 

通过运行以下命令来检查:

ls -al /usr/local/bin/python3

3
最后……谢谢!!!我在虚拟环境中遇到了这个问题。解决方案也起作用了,只需要使用正确的Python位置即可。 - Paul Jurczyk
2
这对我来说也是一个有用的基本shell参考 - 很多渐进式步骤,并且解释得非常好 :) - cellepo
1
这是一个非常棒的解释。谢谢! - Moisés Olmedo
1
最有信息量的答案! - Special Character
在我的情况下,python3不是一个符号链接,@MaPY的解决方案向我展示了路径 - <module 'posixpath' from '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/posixpath.py'>。 - undefined

91
我发现定位Python最简单的方法是使用 which python 命令,它会显示类似以下的内容:/usr/bin/python

5
这并未回答关于Python的发行版(由谁制作)的问题。 - Scott Prive

78

[GCC 4.2.1 (Apple Inc. build 5646)] 是 Python 编译时使用的 GCC 版本,并不是 Python 自身的版本。Python 版本应该在前一行中给出,例如:

# Apple-supplied Python 2.6 in OS X 10.6
$ /usr/bin/python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

# python.org Python 2.7.2 (also built with newer gcc)
$ /usr/local/bin/python
Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

/usr/bin 中的项目应始终是由苹果在 OS X 中提供的文件或链接,除非有人不明智地更改了其中的内容。要查看 /usr/local/bin/python 指向的确切位置:

$ ls -l /usr/local/bin/python
lrwxr-xr-x  1 root  wheel  68 Jul  5 10:05 /usr/local/bin/python@ -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python
在这种情况下,通常是在python.org安装的Python实例或者是从源代码构建的实例。

64

在 Mac OS X 中,它位于 Python 框架的 /System/Library/Frameworks/Python.framework/Resources 目录下。

完整路径为:

/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python

顺便说一句,找到特定二进制文件很容易:使用which Python命令可以显示Python二进制文件的路径(这可能与我上面发布的相同)。


是的,我知道。只是我有点困惑——我在 /usr/local/bin/ 上运行了解释器并打印了 sys.executable。它显示的是 /usr/bin/python。但我读了文档,上面说苹果提供的 Python 在 /usr/bin/,而 MacPython 的“指向 Python 可执行文件的符号链接位于 /usr/local/bin/”。 - goh
这是有道理的:当你自己编译Python可执行文件并将其移动到,比如说 /Users/John/Downloads/,它会显示它被放置在 /Users/John/Downloads/python。你可以在同一系统上运行多个可执行文件。据我所知,Python.framework 中的那个是主要的,所以你应该依赖于那个。 - cutsoy
31
事实上,Mac OS X 中由 Apple 提供的 Python 位于 /System/Library/Frameworks/Python.framework。而在 /Library/Frameworks/Python.framework 中的任何内容都来自第三方安装程序,通常是 python.org(或其他分发者)的安装程序,或者如果您使用默认框架从源代码构建 Python。 - Ned Deily
1
当我运行/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7时,ps aux输出显示为/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python,为什么会这样 - 我没有看到它是一个符号链接?(在AskDifferent上问了这个问题) - Zitrax
@Tim 谢谢。当我去到 /Library/Frameworks/Python.framework/Versions/,我没有看到我安装的2.7版本,而是一个叫做“Current”的别名文件,当我点击它时,会出现错误提示:“无法完成操作,因为找不到 'Current' 的原始项目。” - Pyderman
令人惊讶的是,which python 显示 /usr/bin/pythin,这不是一个符号链接。这是一条死路,找不到位置。 - Shamal Karunarathne

9

我查看了一些类似的讨论,发现定位所有python2/python3构建的最佳方法是:

which -a python python3

8
在High Sierra操作系统上
which python

这里显示的是默认的Python版本,但如果你从python.org下载并安装了最新版本,你可以通过以下方式找到它:

which python3.6

在我的机器上显示为

/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6

这并没有回答哪个Python发行版(由谁制作)的问题。 - Scott Prive

4

使用'brew install python3'安装Python3,可以在这里找到它 enter image description here


3
在您的交互式终端中运行此命令。
import os
os.path

它将为您提供安装Python的文件夹。

1
"

which python3 只是返回解释器安装的路径。

"

1
在一个 .py 文件中运行以下代码:
import sys

print(sys.version)
print(sys.executable)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接