How to: Set the Python executable used to run .py files from the command-line on Windows
Summary: When you type
script.py at the Command Prompt on Windows, the Python executable used to run the script is not the first
python.exe file found on your PATH, it is the the executable that is configured to run .py files when you double-click on them, which is configured in the registry.
I ran into a strange problem on Windows recently, when I was trying to run one of the GDAL command-line Python scripts (I think it was
gdal_merge.py). I had installed GDAL in my conda environment, and
gdal_merge.py was available on my
PATH, but when I ran it I got an error saying that it couldn’t import the
gdal module. This confused me a bit, so I did some more investigation.
I eventually ended up editing the
gdal_merge.py script and adding a few lines at the top
import sys print(sys.prefix) print(sys.executable) print(sys.path)
This showed me that the script was being run by a completely different Python interpreter, with a completely separate site-packages folder – so it was hardly surprising that it couldn’t find the
gdal library. It turns out that this ‘other’ Python interpreter was the one installed automatically by ArcGIS (hint: during the ArcGIS setup wizard, tell it to install Python to
c:\ArcPython27, then it’s easy to tell which is which). But, how could this be, as I’d removed anything to do with the ArcGIS Python from my
After a bit of playing around and Googling things, I found that when you type something like
gdal_merge.py at the Command Prompt it doesn’t look on your
PATH to find a
python.exe file to execute the file with…instead it does the same thing as it would do if you double-clicked on the Python file in Explorer. This is kind of obvious in retrospect, but I spent a long time working it out!
The upshot of this is that if you want to change the Python installation that is used, then you need to change the Filetype Assocation for .py files. This can be done by editing the registry (look at
HKEY_CLASSES_ROOT\Python.File\shell\open\command) or on the command-line using the
ftype command (see here and here).