Check Python version from inside script? Run Pythons script in v2 compatibility mode?
Steve D'Aprano
steve+python at pearwood.info
Fri Jul 7 03:53:38 EDT 2017
On Fri, 7 Jul 2017 04:30 pm, Ben S. wrote:
> Can I somehow check from inside a Python script if the executing Python engine
> is major version v2 or v3?
Yes you can, but generally speaking you shouldn't.
import sys
if sys.version_info >= (3,): # the comma is important
print("version 3")
else:
print("version 2")
But keep in mind that your code must be syntactically valid for the running
version regardless of the result of the test. This will **NOT** work:
import sys
if sys.version_info >= (3,): # the comma is important
print("version 3")
else:
print "version 2" # Python 2 syntax
Earlier I said that in general you shouldn't test for the version. Normally you
should test for a specific feature, not for the version number. For example,
suppose I want to use the "reduce()" function. In Python 2 it is a built-in
function, but in Python 3 it is moved into the functools module.
Don't do this:
if sys.version_info >= (3,):
from functools import reduce
This is better:
try:
reduce
except NameError:
# reduce no longer defined as a built-in
from functools import reduce
That's now not only backwards compatible, but it is forward compatible: if
Python changes in the future to bring reduce back into the built-in functions,
your code will automatically keep working.
Dealing with syntax changes in hybrid version 2 + 3 code is quite tricky. It can
be done, but it is painful, even for experts.
> Additional question:
> Is there a way to execute a python script with v3 python engine in v2
> compatibility mode? I am thinking about a command parameter like (python.exe
> is v3.*):
>
> python.exe -execute_as_v2 myscript.py
No. Python 3 is always Python 3, and Python 2 is always Python 2. But what you
can do is install both, and then call
python2.exe myscript.py
python3.exe anotherscript.py
--
Steve
“Cheer up,” they said, “things could be worse.” So I cheered up, and sure
enough, things got worse.
More information about the Python-list
mailing list