Question: I have been using Emacs to write Python 2 code. Now I have both Python 2.6 and 3.0 installed on my system, and I need to write Python 3 code as well.

Here is how the different versions are set up in /usr/bin:

```
python -> python2.6*
python2 -> python2.6*
python2.6*

python3 -> python3.0*
python3.0*

```

Is there any way to set this up so that Emacs uses the correct version of Python, depending on which language I am using? For instance, C-c C-c currently runs the buffer, but it always calls python2.6, even if I am writing Python 3 code.

Answer: 
If you are using python-mode.el you can try to change `py-which-shell`. In order to do this on a per-file basis you can put

```
# -*- py-which-shell: "python3"; -*-

```

at the first line of your file - or at the second line if the first line starts with `#!`.
Another choice is to put

```
# Local Variables:
# py-which-shell: "python3" 
# End: 

```

at the end of your file. Perhaps you should give the full path to python3 instead of just "python3".
My comment on [this answer](https://stackoverflow.com/questions/501626/both-python-2-and-3-in-emacs/502422#502422). 

I wrote /t/min.py which will run fine in python3 but not in python2 (dictionary comprehension works in python3)

Contents of /t/min.py

```
#!/usr/bin/python3
# -*- py-python-command: "/usr/bin/python3"; -*-
a = {i:i**2 for i in range(10)}
print(a)

```

Note that the shebang indicates python3 and the file local variable py-python-command too.

I also wrote /t/min-py.el which makes sure that python-mode.el (ver 5.1.0)is used instead of python.el.

Contents of /t/min-py.el

```
(add-to-list 'load-path "~/m/em/lisp/")
(autoload 'python-mode "python-mode" "Python Mode." t)
;; (setq py-python-command "python3")

```

Note that the last line is commented out.

I start emacs with the following command:

```
emacs -Q -l /t/min-py.el /t/min.py &

```

Now emacs is started with my alternate dotemacs /t/min-py.el and it opens /t/min.py.

When I press C-c C-c to send the buffer to python, it says the "for" part is wrong and that indicates that python2 is being used instead of python3. When I press C-c ! to start the python interpreter, it says python 2.5 is started.

I can even change the second line of /t/min.py to this:

```
# -*- py-python-command: "chunkybacon"; -*-

```

and do this experiment again and emacs still uses python2.

If the last line of /t/min-py.el is not commented out, then C-c C-c and C-c ! both use python3.