返回了错误的Python版本,并在ZSH中设置了正确的$ PATH


0

我的环境设置发生了一些非常错误的事情。在我想学习的过程中,我决定在我的Macbook Pro上重新安装Mac OSX El Capitan并开始从头开始安装和配置。我使用的Shell是ZSH,我用Oh-My-ZShell配置了一下。

我的$ PATH和Python:

~  echo $PATH
/Users/edchigliak/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/edchigliak/bin
~  python --version
Python 2.7.10
~ 

下面的屏幕截图清楚地显示了安装了两个Python2 /usr/bin和一个Homebrewed Python3 /usr/local/bin

Python2和Python3路径的终端截图

以下是printenv(仅与PATH和SHELL相关的条目)的结果:

PATH=/Users/edchigliak/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/edchigliak/bin
PWD=/Users/edchigliak
SHELL=/usr/local/bin/zsh
SHLVL=2
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.lRGo5iu4NA/Listeners
TERM=screen-256color
ZSH=/Users/edchigliak/.oh-my-zsh
__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
_=/usr/bin/printenv

我的第一次进入.zshrc

export PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/bin 

非常感谢!


这些都不是字面上称为python你输入的命令。你得到type python什么?
tripleee

@tripleee嘿thx快速回复。我得到了这个python is /usr/bin/python
亚历克斯星巴克

1
目前尚不清楚为什么你认为这个结果是“错误的”。
2014年

我认为这是错误的,因为我改变了我$PATH.zshrc文件,export PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin并认为which python现在应该返回python 3xx
亚历克斯星巴克

它不应该; 只能which python3.xx返回那个结果。
triee

Answers:


0

在shell提示符下python键入python时,只会考虑精确命名的二进制文件。

如果要python执行python3,完成此操作的简单方法是在个人shell启动文件中设置函数或别名。

你绝对不能python指出python3系统范围,因为这会打破一些操作系统和第三方工具,这些工具需要python是Python版本2.这两种是互不兼容的语言(或方言,如果你愿意的话)。

要查看此处发生的情况,当您command在提示符处键入时,shell会遍历您的目录PATH并查找command每个目录中确切命名的可执行文件,直到找到一个或用完要查看的位置。它将简单地忽略具有其他名称的任何文件,即使它们恰好相似,如xcommandcommandantecommand3.xx。如果你有一个别名或一个函数,那么将使用它,尽管你PATH可能会查询你的别名或函数调用的其他命令。


我理解这一部分,我不明白的是:为什么which python返回系统一,即使我已经改变了我的.zshrc文件中的$ PATH变量?另外,为什么集合PATH输出中的条目是printenv这个荒谬的长路径而不是我在.zshrc中设置的那个?谢谢!
亚历克斯星巴克

您的zsh启动文件的其他部分可能会修改路径PATH=$HOME/bin:PATH。当然,它应该只需要一次。但这与此没有直接关系,在您的实际问题中根本没有提及。
triee

0

shell搜索PATH以获得完全匹配。当您输入时python,它会尝试查找可执行文件匹配^python$; ^python...$不一样。

在你的情况下,可能是/ usr / local / bin中没有python,或者可能存在权限问题,这会使其被跳过。

1)如果没有python/usr/local/bin

您可以使用sudo ln -s /usr/local/bin/python3.6 /usr/local/bin/python创建python指向要使用的Python解释器的软链接。因为首先搜索/ usr / local / bin以获取PATH,所以shell现在应该找到此链接。

2)如果文件存在/usr/local/bin但没有执行权限,请尝试sudo chmod a+x /usr/local/bin/python

现在想不出其他问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.