我正在尝试从bash (version ) 命令行运行ipython。4.4.19
作为一名 Python 开发人员,我ipython在各种virtualenvs 的路径中安装了各种版本的各种安装,因此知道我正在运行哪个很重要。因此,$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
Run Code Online (Sandbox Code Playgroud)
其中重要的细节是第一个条目是“ /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
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,which表示该文件将作为“ $ ipython”命令运行
$ which ipython
/Users/jab/.virtualenvs/tools/bin/ipython
$ $(which ipython) -c "import sys; print(sys.executable)"
/Users/jab/.virtualenvs/tools/bin/python
Run Code Online (Sandbox Code Playgroud)
然而,实际情况并非如此,/usr/local/bin/ipython而是运行
$ ipython -c "import sys; print(sys.executable)"
/usr/local/bin/python3
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么bash忽略我$PATH并使用“错误”的可执行文件?我需要更改什么(在我的 bashrc或我的系统 ( macOS 10.12.3) 中),以便 bash 按照我的 .bashrc文件确定的顺序选择可执行文件$PATH。
注意:这不是重复的Bash 没有找到程序,即使它在我的路径上,因为它询问 PATH 如何工作以找到任何程序,而这个问题不知道为什么找到错误的程序。
看起来在之前的 bash 会话中,“错误的”可执行文件被称为然后它的路径名被 Bash 记住(这是正常的,这样的功能可以防止进一步PATH查找已知命令)。
要解决此问题,您应该运行
$ hash -d ipython
Run Code Online (Sandbox Code Playgroud)
这会清除 的记住位置ipython,因此 Bash 需要PATH再次搜索以找到命令(这就是它找到正确的可执行文件的时间)。