2011-01-14 3 views
2

Für ein Python-Skript brauche ich eine bestimmte Python-Version. Jetzt enthält meine Installation von Python 2.6 sowohl python26 als auch python2.6Was im Shebang python26 oder python2.6 zu referenzieren ist

Welchen sollte ich in den Shebang setzen?

Option 1:

#!/usr/bin/env python2.6 

Option 2:

#!/usr/bin/env python26 

EDIT: Ja, es gibt einen Grund, nicht schlicht Python zu verwenden. In einigen unserer Umgebungen in der Universität ist Python mit Python2.4 verbunden und mein Code benutzt ziemlich einige 2.6 Eigenschaften.

+0

Was ist 'Python 26' Wenn Sie auf die Windows-Installation beziehen, die Sie nicht brauchen das.? 'shebang' (#!) – user225312

Antwort

3

Nur überprüft auf meinem Linux-System gibt es nur python2.6 nicht python26 so sieht das ehemalige besser aus.

Nur um zu verdeutlichen, würde ich stattdessen bedingte Importe verwenden, in meinem Fall brauche ich OrderedDict, die nur Python 2.7 + ist;

try: 
    from collections import OrderedDict 
except ImportError: 
    print("Python 2.7+ is needed for this script.") 
    sys.exit(1) 
+0

Danke, in der Tat habe ich nach dieser Antwort eine Ubuntu-Maschine überprüft und es war nicht da.Auf unseren CentOS- und Fedora-Boxen sind beide immer da –

+0

Ich denke du wirst feststellen, dass es darauf ankommt Ubuntu release du verwendest. Ich benutze Maverick, und python2.6 ist da. Das bevorstehende Natty Release hat es vielleicht nicht standardmäßig, aber es ist verfügbar, wenn du es installieren willst. Als Referenz: http: // packages .ubuntu.com/Meer rch?keywords = python –

+0

Ich würde stattdessen bedingte Importe verwenden, bail out, wenn die benötigte Funktionalität nicht da ist. – ismail

-1

Warum verwenden Sie nicht einfach /usr/bin/python? Gibt es einen Grund, das nicht zu tun?

Wenn Sie es noch nicht haben, können Sie einen Link, um es erstellen diesen Befehl:

ln -s /usr/bin/python26 /usr/bin/python

Diese Kompatibilität gewährleistet, wenn Sie jemals Ihren Python in der Zukunft aktualisieren.

+3

Ich stimme zu, aber nicht, dass es besser ist, '/ usr/bin/env python' anstatt'/usr/bin/python' zu verwenden. Ersteres sucht nach einem Programm namens 'python' im Suchpfad des Benutzers, während letzteres erfordert, dass es sich in'/usr/bin' befindet, was abhängig von der Distribution und der Konfiguration möglicherweise wahr ist. (Zum Beispiel in den meisten Distributionen, wenn Python manuell installiert wurde, wird es in '/ usr/local/bin' sein.) – mgiuca

+0

Nein, ich meine statt'/usr/bin/python26' –

+0

Nun ja, ich stimme zu, dass Sie sollten benutze 'python' anstelle von' python2.6'. Aber zusätzlich sollten Sie '/ usr/bin/env whatever' anstelle von'/usr/bin/whatever' verwenden. – mgiuca

8

Sie können nicht immer garantieren, dass der Shebang verwendet wird (oder sogar, dass der Benutzer diese Version haben wird).

Sie sollten nicht wirklich auf eine bestimmte Version genau beschränken. Am besten ist es mindestens eine bestimmte Version verlangen (wenn Ihr Code auf Python funktioniert 2.6, warum soll es nicht auf Python arbeitet 2.7? Ich könnte nicht haben Python 2.6 in wenigen Monaten installiert.)

Ich würde Stick mit dem /usr/bin/env python shebang und stattdessen dynamisch die Version erkennen. Ob Sie es glauben oder nicht, die „normale“ Art und Weise, dies zu tun ist:

import sys 
ver = sys.version[:3] 

, die Ihnen ein 3-Zeichenkette wie „2.6“ oder „2.7“. Ich würde nur überprüfen, dass das erste Zeichen = '2' (vorausgesetzt, Sie möchten verhindern, dass Python 3 Ihre Skripte ausführt, da es weitgehend inkompatibel ist) und das dritte Zeichen> = '6'.

bearbeiten: Siehe Petr Kommentar - sys.version_info[0:2] stattdessen verwenden (gibt Ihnen ein Paar wie (2, 6) oder (2, 7)

+2

Statt sys.version (was eine Zeichenkette ist), sollten Sie sys.version_info verwenden, was ein Tupel ist wie (2, 6, 6, 'final', 0). Überprüfen Sie die sys.version-Dokumentation mit dem Titel "Entpacke keine Versionsinformationen daraus": http://docs.python.org/library/sys.html#sys.version –

+0

Ich bleibe korrigiert. Ich muss ursprünglich alte Ratschläge gelesen haben (offensichtlich wurde version_info in Version 2.0 hinzugefügt, also mussten die Leute zu einem bestimmten Zeitpunkt die Version aus der Zeichenfolge entfernt haben). – mgiuca

+0

mguica und Petr, danke für die Hilfe dabei. Genau das habe ich gebraucht. – GreeenGuru

Verwandte Themen