Domanda

Esiste qualcosa di simile a Pylint, che guarderà uno script Python (o lo eseguirà) e determinerà quale versione di Python richiede ogni riga (o funzione)?

Ad esempio, uso teorico:

$ magic_tool <EOF
with something:
    pass
EOF
1: 'with' statement requires Python 2.6 or greater

$ magic_tool <EOF
class Something:
    @classmethod
    def blah(cls):
        pass
EOF
2: classmethod requires Python 2.2 or greater
$ magic_tool <EOF
print """Test
"""
EOF
1: Triple-quote requires Python 1.5 of later

È possibile una cosa del genere? Suppongo che il modo più semplice sarebbe avere tutte le versioni di Python su disco, eseguire lo script con ognuna e vedere quali errori si verificano.

È stato utile?

Soluzione

Ispirato da questa eccellente domanda, di recente ho messo insieme una sceneggiatura che cerca di farlo. Puoi trovarlo su github all'indirizzo pyqver .

È ragionevolmente completo ma ci sono alcuni aspetti che non sono ancora stati gestiti (come menzionato nel file README). Sentiti libero di rovesciare e migliorarlo!

Altri suggerimenti

Non è una vera risposta utile, ma qui va comunque. Penso che questo dovrebbe essere fattibile (anche se probabilmente abbastanza un esercizio), ad esempio potresti assicurarti di avere tutte le grammatiche ufficiali per le versioni che vuoi controllare, come questo .

Quindi analizza il bit di codice a partire dalla prima versione grammaticale. Successivamente è necessaria una mappa simile di tutti gli spazi dei nomi dei moduli integrati e analizzare nuovamente il codice a partire dalla versione più vecchia, anche se potrebbe essere difficile distinguere tra moduli integrati e moduli esterni o qualcosa tra loro come ElementTree.

Il risultato dovrebbe essere una panoramica delle versioni che supportano la sintassi del codice e una panoramica dei moduli e quale versione (se del caso) è necessaria per usarlo. Con quel risultato puoi calcolare la migliore versione più bassa e più alta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top