A simple way to check if particular script or package will compile (not crash with SyntaxError
) on particular version of Python.
It can be used at early stage of Python 3 porting, to enforce usage of new-style print
, except
, raise
and so on,
and at the same time retain Python 2.6 compatibility.
pip install https://github.com/alexanderlukanin13/check-python-syntax/archive/master.zip
All necessary python versions should also be installed.
Import check_python_syntax
function and call it upon files and directories.
It returns a simple dictionary {file_path: [is_valid, message]}
.
>>> from check_python_syntax import check_python_syntax >>> check_python_syntax(['/tmp/code'], python_version='3.4') {u'/tmp/code/x.py': [False, u' File "/tmp/code/x.py", line 2\n raise Exception, \'a\'\n ^\nSyntaxError: invalid syntax\n'], u'/tmp/code/s.py': [True, u'OK'], u'/tmp/code/z.py': [True, u'OK']}
You can specify multiple targets:
>>> check_python_syntax(['/tmp/code/x.py', '/tmp/code/z.py'], python_version='2.6') {u'/tmp/code/x.py': [True, u'OK'], u'/tmp/code/z.py': [True, u'OK']}
And multiple versions (first existing version will be used):
>>> check_python_syntax(['/tmp/code/s.py'], python_version=('3.9','3')) {u'/tmp/code/s.py': [True, u'OK']} >>> check_python_syntax(['/tmp/code/s.py'], python_version='3.9') {'<exception>': [False, "No Python executable found for '3.9'"]}
$ python check_python_syntax.py -v 2.7 -p /tmp/code { "/tmp/code/s.py": [ true, "OK" ], "/tmp/code/x.py": [ true, "OK" ], "/tmp/code/z.py": [ true, "OK" ] } $ echo $? 0 $ python check_python_syntax.py -v 3.4 -p /tmp/code { "/tmp/code/s.py": [ true, "OK" ], "/tmp/code/x.py": [ false, " File \"/tmp/code/x.py\", line 2\n raise Exception, 'a'\n ^\nSyntaxError: invalid syntax\n" ], "/tmp/code/z.py": [ true, "OK" ] } $ echo $? 1
Compiled *.pyc
files are written to system temp directory (e.g. to /tmp
).
To achieve better performance, it's highly recommended to use memory file system (tmpfs).
Example /etc/fstab
entry:
tmpfs /tmp tmpfs size=256m 0 0