MacPorts 说当 "python --version" 是 运行 时我还有 Python 2.7
MacPorts says I still have Python 2.7 when "python --version" is run
指示 MacPorts 切换到 Python 3.4 后,python --version
仍然输出 2.7.10。请注意 "which python" 确实表明 /opt/local/bin 在我的路径中 /usr/bin/ 之前出现:
$ which python
/opt/local/bin/python
$ python --version
Python 2.7.10
$ ls -l /opt/local/bin/python
lrwxr-xr-x 1 root wheel 24 Aug 1 10:00 /opt/local/bin/python -> /opt/local/bin/python2.7
$ sudo port select --list python
Available versions for python:
none
python26-apple
python27 (active)
python27-apple
python34
$ sudo port select --set python python34
Selecting 'python34' for 'python' succeeded. 'python34' is now active.
$ which python
/opt/local/bin/python
$ python --version
Python 2.7.10
$ ls -l /opt/local/bin/python
lrwxr-xr-x 1 root wheel 24 Aug 1 10:00 /opt/local/bin/python -> /opt/local/bin/python3.4
请注意符号链接是如何变化的,但声明的版本没有变化。给出了什么?
tl;dr: 运行 hash -r
.
出于速度原因,当您在 shell.
中键入 python
时,shells 会保留可执行文件需要 运行 的缓存
想想如果没有这样的缓存,shell 会怎样:对于您输入的每个命令(不是绝对路径),shell 必须
- 检查
$PATH
中的条目,并针对每个条目
- 发出
stat(2)
系统调用来测试命令是否存在于当前搜索的目录中。请记住,在 shell 最初开发时,这可能涉及慢速旋转磁盘甚至网络文件系统。
为了加快速度,大多数 shell 只会对每个命令执行一次,直到 $PATH
被更改,或者您手动告诉 shell 删除缓存(例如,在 bash 中使用 hash -r
,在其他一些 shell 中使用 rehash
。
我听说有些 shell 也缓存符号链接。
指示 MacPorts 切换到 Python 3.4 后,python --version
仍然输出 2.7.10。请注意 "which python" 确实表明 /opt/local/bin 在我的路径中 /usr/bin/ 之前出现:
$ which python
/opt/local/bin/python
$ python --version
Python 2.7.10
$ ls -l /opt/local/bin/python
lrwxr-xr-x 1 root wheel 24 Aug 1 10:00 /opt/local/bin/python -> /opt/local/bin/python2.7
$ sudo port select --list python
Available versions for python:
none
python26-apple
python27 (active)
python27-apple
python34
$ sudo port select --set python python34
Selecting 'python34' for 'python' succeeded. 'python34' is now active.
$ which python
/opt/local/bin/python
$ python --version
Python 2.7.10
$ ls -l /opt/local/bin/python
lrwxr-xr-x 1 root wheel 24 Aug 1 10:00 /opt/local/bin/python -> /opt/local/bin/python3.4
请注意符号链接是如何变化的,但声明的版本没有变化。给出了什么?
tl;dr: 运行 hash -r
.
出于速度原因,当您在 shell.
中键入python
时,shells 会保留可执行文件需要 运行 的缓存
想想如果没有这样的缓存,shell 会怎样:对于您输入的每个命令(不是绝对路径),shell 必须
- 检查
$PATH
中的条目,并针对每个条目 - 发出
stat(2)
系统调用来测试命令是否存在于当前搜索的目录中。请记住,在 shell 最初开发时,这可能涉及慢速旋转磁盘甚至网络文件系统。
为了加快速度,大多数 shell 只会对每个命令执行一次,直到 $PATH
被更改,或者您手动告诉 shell 删除缓存(例如,在 bash 中使用 hash -r
,在其他一些 shell 中使用 rehash
。
我听说有些 shell 也缓存符号链接。