Python软链接到python3

10

我正在为我的新MacBook M1设置默认变量,但由于某种原因,我的符号链接似乎无法工作。

为什么会出现以下行为?从pythonpython3的符号链接以某种方式丢失了。 /Users/overflow/Documents/tools是我的PATH变量的一部分。

$ type python
python is /Users/overflow/Documents/tools/python

$ python -V
Python 2.7.16

$ ls -lah /Users/overflow/Documents/tools/python
lrwxr-xr-x  1 overflow  staff    16B  6 Oct 18:48 /Users/overflow/Documents/tools/python -> /usr/bin/python3

$ /usr/bin/python3 -V
Python 3.8.9

$ echo $PATH | sed 's/:/\n/g'
/Users/overflow/Documents/tools
/Users/overflow/Documents/Dropbox/productivity/bin
/Users/overflow/Documents/tools/confluent-6.1.0/bin
/Users/overflow/.sdkman/candidates/java/current/bin
/Users/overflow/.nvm/versions/node/v16.10.0/bin
/Users/overflow/bin
/usr/local/bin
/opt/homebrew/bin
/opt/homebrew/sbin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

1
一些系统可能仍然使用Python 2来运行某些函数,有时更改符号链接可能会导致系统崩溃。最好使用命令“python3”或“python3.8”来运行Python 3。 - furas
也许它是一个别名或函数...运行'type python'..它会给你比'which'更好的答案。 - 9mjb
我之前不知道 type 命令,它太棒了!- 我刚刚用 type 命令替换了 which 语句。还在那里添加了我的 PATH - JaviOverflow
1
你没有展示:哪个Python的结果。 - Ptit Xav
运行 hash -r 然后再试一次。它会清除 shell 中的缓存。 - VPfB
显示剩余7条评论
5个回答

5

针对macOS 13(Ventura)

首先需要安装python3,然后设置一个别名将其链接到python3。

echo 'alias python="python3"' >> ~/.zshrc && source ~/.zshrc;

5
我可以给你一些常规的故障排除技巧并提供一种可以替代符号链接的绷带。
$(which python) -V

这应该可以帮你获取Python3的版本。
其他值得检查的事项:
which python2

应该指向一些标准位置,例如/usr/bin/python2。如果没有指向那里,可能值得了解原因。

总的来说,Mac电脑有一些怪异之处。新的MacBook M4默认安装Python2的事实表明您可能不应尝试覆盖默认值,出于某种原因,它似乎不想让您这���做。

简单的答案:设置别名。

echo 'alias python="python3"' >> ~/.zshrc && source;

这对你来说是有效的,不应该干扰任何潜在的其他系统。

更好的答案:

正如其他人所描述的那样,创建一个虚拟环境并使用source venv/bin/activate命令。


如果 args[0] 以 3 结尾,将 +1 到 alias python="python3",无论 venv 设置为什么,您都将获得 Python3 解释器。 - user10316640

4

如果路径没有被使用,它就会被shell别名覆盖。可以通过键入 set | grep python 来确认这一点。

如果你正在使用virtualenv

尝试: /usr/bin/python3 -m venv python3.8.9

常见的 MacOS Python 管理器有:

  1. pythonz

使用 pythonz list 列出安装列表

使用以下命令进行更改:/usr/bin/python3 -m venv python3.8.9

  1. pythonbrew

使用 pythonbrew list 列出安装列表

使用 pythonbrew switch 3.8.9 切换到新版本。

  1. pyenv

据称只使用 $PATH。为了完整起见,但以防万一而包含在此处。

使用 pyenv versions 列出安装列表

使用 pyenv global 3.8.9 切换到新版本。


要删除它们中的任何一个,请从你的 ~/.bashrc ~/.zshrc 文件中删除相应行。

使用 grep ~/.bashrc python 可以定位这一行。


1
"set | grep python" 没有返回任何内容,这三个 Python 管理器都没有安装。 - JaviOverflow
如果 OP 设置了别名,那么 type python 将会打印出 python is an alias for ...。由于他们在问题中提供了 type python 的输出,我们可以安全地说他们 没有 设置别名。 - thisisrandy
@thisisrandy,没错。当我开始回答时,输出类型并不存在。在这种情况下,很可能是Python虚拟环境的问题。 - user10316640

2
这个解决方案不仅适用于Mac,而且在基于.deb的系统上你也可以使用:
sudo apt install python-is-python3

-1

我只是创建了一个符号链接,指向实际的python -V所在位置。

执行以下命令:

  1. type python#在我的情况下是/usr/bin/python3,它是已安装版本的符号链接。它以青色显示。更改目录,切换到那里。
  2. cd /usr/bin/(其中包含python3,让我们列出python单词
  3. ls pyth* #在我的情况下是python3python3.10
  4. 如何创建符号链接: ln [OPTION]... [-T] TARGET LINK_NAME
  5. sudo ln -s python3.10 python

你将拥有一个没有末尾数字的最简单的符号链接。

  1. 让我们试试:python

可选地,您可以删除末尾带有数字的符号链接。


你没有这样做,因为在Mac上无法写入/usr/bin - miken32
它可以在Linux上运行,并且应该也可以在Mac上运行。我想你可以作为监督者来完成它。 - stefansson
在 Mac 上,无论是使用 sudo 还是 root 用户,都不能将文件写入 /usr/bin 目录。 - miken32

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