17

I have installed Anaconda 2 & 3 in my system. Anaconda 2 contains python 2.7 & Anaconda 3 contains python 3.6.

I need to run my python code using command prompt & I need to use python 3.6 While I'm running python --version, I'm getting python 2.7.14. How do I change it to python 3.6?

Emily Johnson
  • 315
  • 1
  • 5
  • 10

7 Answers7

26

Both Python2 and Python3 is installed
As you can see, I have both Python2 and Python3 installed.

Windows Path variable
I hope you know that the path of the python executable has to be added to the PATH environment variable in Windows. As you can see, the path of Python2 is placed above the path of Python3 in my system.

How does the cmd run commands?
It searches for an executable with the same name in the directory the cmd has been opened in, then goes and searches for the command in the locations provided in the Windows PATH variable, from TOP to BOTTOM. Which means, it gets the path to Python2 before it can get to the path of Python3. Therefore, every time you type python in your cmd, it runs Python2.
Both Python2 and Python3 executables have the same name in Windows so it never runs python3.

What seems like an obvious solution?
You might think, changing the name of python.exe to python3.exe for the Python3 executable will solve your problem. You are partially right, it will work. But you have to use python3 file.py or python3 --version, which I think, is understandable. But, pip will no longer work if you change the name of the original python executable. You will no longer be able to install external packages and modules.

How can this problem be solved?
You can create an alias for the Python3 executable called python3.bat.
.exe and .bat files can be called from the cmd directly without using their extension. We always write python filename.py instead of python.exe filename.py although both are correct. The same can be done with .bat files.
Go back to the first image and notice the python3.bat file below python.exe. That is my way of calling python3 without renaming my original python executable.

python3.bat
Create a new file using notepad or something and paste this %~dp0python %*
I don't fully understand how this works except that dp0 basically runs python from inside the same directory and %* passes all the arguments to the python executable. Place this file inside your Python3 installation directory and your problem will hopefully be solved.

Python and Python3
python3 basically runs your python3.bat file, which in turn runs the python.exe from its folder and passes the arguments to it.

I hope this solves your problem.

Diptangsu Goswami
  • 5,554
  • 3
  • 25
  • 36
6

You should have python3 also in your path. You could use python3 to run your script:

python3 <your_script>

But to answer your question, you could use alias and update it as python.

$ python --version    
Python 2.7.6
$ alias python=python3
$ python --version    
Python 3.6.4
akshat
  • 1,219
  • 1
  • 8
  • 24
  • While this answer is correct, I think it would be better to directly run `python3` instead of creating an alias. If the user will want `python2` at some future time, he/she can directly run `python` (which was the default behavior). – Shubham May 15 '18 at 11:34
  • 1
    hence, the first part of answer. :) – akshat May 15 '18 at 11:35
  • @akshat quick question, when I do this it does not seem to "save it", when I close the terminal window and do python --version again, it displays the previous version – Arthur Langlois Jul 21 '21 at 23:18
  • @ArthurLanglois, you can add it to your ~/.bashrc – akshat Dec 03 '21 at 06:41
1

If you want to run Python 3.6, then execute python3.6. Otherwise, check with which python where the symbolic link to the actual python executable is. On my system, it's

/usr/bin/python

and when I ls -la /usr/bin/python, it gives

lrwxrwxrwx 42 user user 42 Aug 24 03:45 /usr/bin/python -> python2.7

If you are really sure that you want to do it, you can now just move the old symlink somewhere:

sudo mv /usr/bin/python /usr/bin/old_python

and create a new symlink:

sudo ln -s /usr/bin/python3.6 /usr/bin/python

Now you should get something like:

$ python --version
Python 3.6.5

I don't guarantee that it doesn't break everything in the world, especially if you have some distro that has a package manager that relies on a specific python version under python.

This seemed to work nicely on Linux Mint 18.

Andrey Tyukin
  • 43,673
  • 4
  • 57
  • 93
1

I made a small trick to solve this problem. For me

C:\Python27

and

C:\Python27\Scripts

were at the top of the PATH Environment variable list. I simply selected them and clicked on Moved Down to shift them to the end of the list.

Just make sure that your path of Python3 and its Script folder is above Python2 path.

And it solved the problem for me. Hope it would help you too.

Reason :

How does the cmd run commands?

It searches for an executable with the same name in the directory the cmd has been opened in, then goes and searches for the command in the locations provided in the Windows PATH variable, from TOP to BOTTOM. Which means, it gets the path to Python2 before it can get to the path of Python3. Therefore, every time you type python in your cmd, it runs Python2. Both Python2 and Python3 executables have the same name in Windows so it never runs python3.

reason is taken from the accepted answer to this question.

Community
  • 1
  • 1
sagnik.20
  • 21
  • 5
0
  • If Anaconda 3's is the only python3 interpreter in the system you can run python3 instead of python in your command line and it should work.

  • You can alter PATH parameter inverting the positions of both interpreters.

HoldOffHunger
  • 18,769
  • 10
  • 104
  • 133
haraprasadj
  • 1,059
  • 1
  • 8
  • 17
-1

In order to run your script with python 3 you can use

python3 <path to file>

P.S.: this should be a comment, but I do not have the required reputation. :)

Silviu
  • 79
  • 9
  • No, this is good here. But it does not exactly answer the question. i.e. _How do I change it to python 3.6_ – akshat May 15 '18 at 11:34
  • Upsy daisy, seeing your answer I realized that you are right, this is more an workaround, but it still works. – Silviu May 15 '18 at 11:48
-1

I have two versions of the python which the first path is python 2(I am still working with python 2), but there are some scripts which should use python 3. This is what I have done: I have create a bat file. ex: open Notepad++ and write :

@echo off
set PYTHONPATH=
"%~dpn0.py" %*

save it as 'yourscriptname.cmd'. before my script(which should use python3) I just run this file in command line and then run my script. it is working.

kätzchen
  • 59
  • 1
  • 4