我正在尝试从bash(版本)命令行运行ipython 。4.4.19
作为一名 Python 开发人员,我ipython
在各种 s 路径中安装了各种版本的各种版本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 按照 my 确定的顺序选择可执行文件$PATH
。
注意:这不是重复的Bash is not find a program 即使它在我的路径上,因为它询问 PATH 如何查找任何程序,而这个问题是关于为什么找到错误的程序。
看起来在您的 bash 会话中的某个时间,“错误”的可执行文件被调用,然后它的路径名被 Bash 记住(这是正常的,这样的功能可以防止
PATH
对已知命令的进一步查找)。要解决此问题,您应该运行
这清除了 的记忆位置
ipython
,因此 Bash 需要PATH
再次搜索以找到该命令(这就是它找到正确可执行文件的时候)。