【问题标题】:Python symlink to python3Python 符号链接到 python3
【发布时间】:2021-10-06 17:58:30
【问题描述】:

所以我在新的 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

【问题讨论】:

  • 某些系统可能仍然使用 Python 2 来运行某些功能,有时更改符号链接可能会破坏系统。更好地使用命令 python3python3.8 运行 Python 3
  • 也许您在当前文件夹中有其他命令 python ,它可能会运行此命令而不是 /Users/overflow/Documents/tools/python 。也许你在PATH 上有路径.,所以它可以运行命令python,比如./python
  • 也许它是一个别名或函数...运行'type python'..它会给你一个比'which'更好的答案。
  • 我不知道type 命令,太棒了! - 我刚刚用type 替换了which 语句。还在那里添加了我的PATH
  • 你没有显示结果:which python

标签: python unix symlink apple-m1


【解决方案1】:

鉴于该路径未被使用,它被一个 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 定位该行。

【讨论】:

  • set | grep python 没有返回任何内容,也没有安装这三个 python 管理器。
  • 如果 OP 设置了别名,type python 将打印 python is an alias for ...。由于他们在问题中提供了type python 输出,我认为我们可以肯定地说他们确实没有设置了别名。
  • @thisisrandy,这是正确的。当我开始回答时,类型输出不存在。在这种情况下,它很可能是 python 虚拟环境。
【解决方案2】:

我可以给你一些一般性的故障排除技巧和一个可以替换符号链接的创可贴。

$(which python) -V

这应该会为您提供 python3 的版本。

其他值得检查的事情:

which python2

这应该指向某个标准位置,例如/usr/bin/python2。如果它没有指向那里,可能值得理解为什么。

一般来说,Mac 有一些怪癖。新的 MacBook M4 附带 Python2 作为默认值这一事实是一种味道,您可能不应该尝试覆盖默认值,并且无论出于何种原因,它似乎都不希望您这样做。

简单的答案:设置别名。

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

这对您有用,不会干扰任何潜在的其他系统。

更好的答案:

正如其他人所描述的,创建一个虚拟环境和source venv/bin/activate

【讨论】:

  • +1 to 'alias python="python3"` 如果args[0] 以 3 结尾,无论venv 设置为什么,您都将获得 Python3 解释器。
猜你喜欢
  • 2021-01-29
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 2016-10-08
  • 1970-01-01
  • 2012-04-21
相关资源
最近更新 更多