Search code examples
bashmacospython-3.6python-3.7

Why has the link from /usr/local/bin/python3 a different path from "which python3"?


I installed python 3.6 before and installed python 3.7.4 today. When I type python3 in command, it opens python 3.6, I want to change it to python 3.7.4.

which python3 shows /Library/Frameworks/Python.framework/Versions/3.6/bin/python3,

but the link in /usr/local/bin/ is : python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.7/bin/python3

so is the case of pip3. why? ?

How can I change which python3 to python 3.7.4? I don't want to use alias.

I use MacOS 10.14.2


Solution

  • Your OS uses the PATH environment variable to look for the commands you write into the shell, so if you type python3 it will go through the directories listed in this PATH and check if there's your programm. It takes the first matching program and executes it, so in your case the directory /Library/Frameworks/.../3.6/bin is before the directory usr/local/bin, which means that the python3 from /Library/Frameworks/.../3.6/bin will be used.

    You need therefore to change this PATH variable:

    export PATH="/Users/sky/Documents/software/Montage-master/bin:/usr/share/file/magic/mercurial:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/mysql/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin"
    

    You can put that into your ~/.bash_profile so that it is permanent, and you don't need to set it every time you open a new terminal window.

    Note that this will not automatically update your path for the remainder of the session. To do this, you should run:

    source ~/.bash_profile