ipython
作为一名 Python 开发人员,我在不同的virtualenv
路径中安装了不同版本的各种版本,因此了解我正在运行哪个版本非常重要。因此,$PATH
当我改变时virtualenv
, 总是会改变,这将是 的典型值PATH
:
$ echo $PATH
/Users/jab/.virtualenvs/tools/bin:/Users/jab/bin:/Users/jab/src/git/hub/jab/bin:/usr/local/gnu:/bin:/usr/local/bin:/usr/bin
其中重要的细节是第一个条目是“ /Users/jab/.virtualenvs/tools/bin
”,并且该文件/Users/jab/.virtualenvs/tools/bin/ipython
确实存在:
$ ls -l /Users/jab/.virtualenvs/tools/bin/ipython
-rwxr-xr-x 1 jab staff 252 May 11 15:18 /Users/jab/.virtualenvs/tools/bin/ipython
正如预期的那样,表示该文件将作为“ ”命令which
运行$ ipython
$ which ipython
/Users/jab/.virtualenvs/tools/bin/ipython
$ $(which ipython) -c "import sys; print(sys.executable)"
/Users/jab/.virtualenvs/tools/bin/python
然而,实际情况并非如此,而是/usr/local/bin/ipython
运行
$ ipython -c "import sys; print(sys.executable)"
/usr/local/bin/python3
有人可以解释为什么bash
忽略我$PATH
并使用“错误”的可执行文件吗?我需要改变什么(在我的 bashrc,或在我的系统上 ( macOS 10.12.3
)),以便 bash 按照我的 确定的顺序选择可执行文件$PATH
。
注意:这不是重复的Bash 没有找到程序,即使它在我的路径上,因为这会询问 PATH 如何查找任何程序,而这个问题是为什么错误的程序找到。
答案1
看起来在您的 bash 会话中的某个先前时间,调用了“错误的”可执行文件,然后 Bash 记住了它的路径名(这是正常的,此功能可防止进一步PATH
查找已知命令)。
要解决这个问题,你应该运行
$ hash -d ipython
这会清除记住的位置ipython
,因此 Bash 需要PATH
再次搜索以找到该命令(此时它会找到正确的可执行文件)。