Mit python -V
(et al.) Können Sie die Version von Python anzeigen, in die der python
Befehl aufgelöst wird. Wenn das alles ist, was Sie brauchen, sind Sie fertig. Aber um jede Version von Python in Ihrem System zu sehen, ist etwas mehr erforderlich.
In Ubuntu können wir die Auflösung mit überprüfen readlink -f $(which python)
. In Standardfällen in 14.04 zeigt dies einfach auf /usr/bin/python2.7
.
Wir können dies verketten, um die Version dieser Python-Version anzuzeigen:
$ readlink -f $(which python) | xargs -I % sh -c 'echo -n "%: "; % -V'
/usr/bin/python2.7: Python 2.7.6
Dies sagt uns jedoch immer noch nur, was unsere aktuelle python
Entschließung ist. Wenn Sie sich in einem Virtualenv-System (einem gängigen Python-Stack-Management-System) befinden, wird python
möglicherweise eine andere Version verwendet:
$ readlink -f $(which python) | xargs -I % sh -c 'echo -n "%: "; % -V'
/home/oli/venv/bin/python: Python 2.7.4
Das ist echte Leistung.
Tatsache ist, dass Hunderte verschiedener Versionen von Python in Ihrem System abgesondert sein können, entweder auf Pfaden, die kontextuell hinzugefügt wurden, oder unter verschiedenen binären Namen (wie python3
).
Wenn wir davon ausgehen, dass eine Python-Binärdatei immer aufgerufen wird python<something>
und eine Binärdatei ist, können wir einfach das gesamte System nach Dateien durchsuchen, die diesen Kriterien entsprechen:
$ sudo find / -type f -executable -iname 'python*' -exec file -i '{}' \; | awk -F: '/x-executable; charset=binary/ {print $1}' | xargs readlink -f | sort -u | xargs -I % sh -c 'echo -n "%: "; % -V'
/home/oli/venv/bin/python: Python 2.7.4
/media/ned/websites/venvold/bin/python: Python 2.7.4
/srv/chroot/precise_i386/usr/bin/python2.7: Python 2.7.3
/srv/chroot/trusty_i386/usr/bin/python2.7: Python 2.7.6
/srv/chroot/trusty_i386/usr/bin/python3.4: Python 3.4.0
/srv/chroot/trusty_i386/usr/bin/python3.4m: Python 3.4.0
/usr/bin/python2.7: Python 2.7.6
/usr/bin/python2.7-dbg: Python 2.7.6
/usr/bin/python3.4: Python 3.4.0
/usr/bin/python3.4dm: Python 3.4.0
/usr/bin/python3.4m: Python 3.4.0
/web/venvold/bin/python: Python 2.7.4
Es ist offensichtlich ein ziemlich abscheulicher Befehl, aber dies ist wieder eine echte Ausgabe und es scheint, dass er einen ziemlich gründlichen Job gemacht hat.
ls /usr/bin | grep python