Wybór wersji interpretera na podstawie wersji skryptu pythona

0

Mam zainstalowane 2 wersje Pythona na swoim windowsie do którego prowadzą odpowiednie zmienne:

> python --version
Python 3.7.1
> python2 --version
Python 2.7.15

Mam też listę projektów w nie wiadomo jakich wersjach (2 lub 3) a ich kodu nie mogę modyfikować (więc rozwiązania typu dodanie python_version() odpadają). To co potrzebuję zrobić to wiedzieć w jakiej wersji został napisany każdy z projektów.
Jest na to jakieś sensowne rozwiązanie?

0

Jak masz te projekty zrobione? Tzn. masz kod źródłowy (chociaż nie możesz go modyfikować) w ogóle, czy tylko pyc? Jeszcze co innego?

Jak masz kod, to możesz go przejrzeć w poszukiwaniu struktur, które są inne w różnych wersjach tego języka (np. łatwym do zauważenia jest print czy xrange).

0

Nie mogę w ogóle ich modyfikować. Szukanie struktur i patrzenie jak implementowany jest print wymaga ode mnie ręcznego przeglądania tych projektów a tego robić nie chcę. Chcę napisać coś takiego że podklejam link do katalogu z projektami i na wyjściu dostaję wersję każdego z nich bez ich modyfikacji.

0

To takiej magii nie ma. Twórca kodu mógł wyrazić wprost, jakiej wersji Pythona używał (np. #!/usr/bin/env python3.7), ale nie musiał.

Najbliżej automatyzacji byłoby odpalanie z różnymi wersjami i patrzenie, która zadziała.

0

Sęk w tym że właśnie takiej magii potrzebuję ;) To założenie też mi nie pomaga bo nie mam pewności że ktoś to zdefiniował.
Póki co też jedyne co udało mi się uzyskać to odpalanie wszystkiego przez jeden i drugi interpreter i patrzenie co się wysypuje natomiast jest to dość czasochłonne rozwiązanie.
Udało mi się trafić jeszcze na to:
https://stackoverflow.com/que[...]f-code-is-python-3-compatible
Próbuję to zweryfikować ale jakoś tak działa mi jak chce i raz faktycznie w przypadku pythona 2 pokazał komunikat o błędzie ale teraz nie wiem dlaczego bez problemu w przypadku obu wersji kompiluje się bez żadnych problemów... Może ktoś ma jeszcze jakieś rozwiązanie?

0

Napisz skrypt w pythonie który:

  • Otwiera pliki źrodłowe
  • Testuje kilka znanych różnic (jak print czy xrange)

;]

0

Napisz sobie skrypt, który skanuje te pliki i szuka rzeczy typu: print <sth>, xrange, range, i markuje je zgodnie z wynikami.

0

Ok, to możę spróbuję jeszcze w te stronę pójść. @Shalom lub @lion137 jeśli przelecę sobie po tych plikach i znajdę np. coś takiego print 'Hello' to czy mogę wówczas uznać że cały projekt jest kompatybilny z Pythonem 2 i dalej nie ma sensu nic szukać? Pytanie może trochę głupie ale piszę w javie a to taki dodatkowy task z pythonem więc wolę się upewnić ;)

1

No nie wiadomo czy jest kompatybilny z pythonem 2 ale na pewno nie jest z pythonem 3 ;)

1

Zgadzam się z przedmówcą:), jeśli Znajdziesz co najmniej jedno print bez nawiasów albo xrange, to na pewno nie jest to trójka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0