Pergunta

Existe algo semelhante a pylint, que vai olhar para um script Python (ou executá-lo), e determinar qual versão do Python cada linha (ou função) requer?

Por exemplo, o uso teórico:

$ 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

É tal coisa possível? Acho que a maneira mais simples seria ter todas as versões Python em disco, executar o script com cada um e ver o que erros ocorrem ..

Foi útil?

Solução

Inspirado por este excelente pergunta, eu recentemente montar um script que tenta fazer isso. Você pode encontrá-lo no github em pyqver .

É razoavelmente completo, mas existem alguns aspectos que ainda não são tratados (como mencionado no arquivo README). Sinta-se livre para forquilha e melhorá-lo!

Outras dicas

Não é uma resposta útil real, mas aqui vai de qualquer maneira. Eu acho que isso deve ser factível para fazer (embora, provavelmente, bastante um exercício), por exemplo, você poderia ter certeza de que todas as gramáticas oficiais para as versões que você deseja verificar, como esta .

Em seguida, analisar o pedaço de código que começa com a primeira versão da gramática. Em seguida, você precisa de um mapa semelhante de todo o built-in namespaces módulo e analisar o código novamente começando com a versão mais antiga, embora possa ser difícil de diferenciar entre built-in módulos e os módulos que são externos ou algo entre como ElementTree.

O resultado deve ser uma visão geral das versões que suportam a sintaxe do código e uma visão geral dos módulos e qual versão (se em tudo) é necessário para usá-lo. Com esse resultado, você pode calcular a melhor menor e maior versão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top