2015-02-03 7 views
1

Положите случай, что у меня есть куча скриптов python, начинающихся либо с #!/usr/bin/env python, либо с ничего (без shebang вообще). Некоторым из этих сценариев нужен python 2.7 (или любая версия 2.x), некоторым из них нужен python 3.x, и некоторые из них могут работать на обоих (они сами проверяют версию python).Как проверить, какая версия python должна использовать

Я нахожусь в системе с двумя версиями python: python2 и python3. Общая программа python - это просто символическая ссылка.

Как эта python ссылка может меняться. Я хочу отредактировать shebangs в скриптах, чтобы указать, должен ли этот скрипт использовать python2 или python3. Есть ли возможность/программа/сценарий для «разбора» сценария python и определения, должен ли он запускаться python2 или python3?

+1

Вы пытались запустить '2to3' на скриптах, чтобы узнать, найдет ли что-нибудь? Яркими признаками могут быть использование 'print x' вместо' print (x) '. Существуют и другие разрывы между py2 и py3. Если '2to3' ни о чем не жалуется, он написан для python3. – kdopen

+0

@kdopen Является ли 2to3 официальным инструментом? Или это внешняя программа? – Uroc327

+0

Должен быть установлен как часть вашего дистрибутива python. Но это всего лишь приблизительное руководство. Действительно, вам нужно подробно изучить сценарий, ища вещи, которые дают понять, для какой версии они пишут. – kdopen

ответ

2

PEP 394 - The "python" Command on Unix-Like Systems:

  • ... python следует использовать в хижину линии только для сценариев, которые источник совместим с Python 2 и 3.

  • в рамках подготовки к возможное изменение в версии по умолчанию Python, только скрипты Python 2 должны быть обновлены, чтобы быть источником , совместимым с Python 3, или использовать python2 в строке shebang.

В общем, тот же сценарий может быть запущен как Python 2 и 3. Это означает, что (по крайней мере, для некоторых скриптов), вы должны прочитать источник и решить для себя, какая версия Python должна быть используемый.

Есть ли возможность/программа/скрипт «разбор» сценарий питона и определить, если он должен получить в ведении python2 или Python3?

Вы могли бы попытаться составить скрипты с использованием python2 и python3 бинарных файлов, попробуйте:

$ python -mcompileall -h 

Если только python3 двоичный код может составить сценарий, можно добавить python3 в притон.

Modernize, Futurize, Pylint packages также может помочь найти python2 -only, python3-только сценарии автоматически.

lib2to3 позволяет обнаружить python2 или python3 маркеры, такие наличие print заявления в источнике (Python 2 маркера) или наличие yield from в качестве источника (Python 3 маркера), но это, вероятно, слишком низкий уровень.

+0

Да, но я знаю, что большинство этих «общих» сценариев python написаны только для версии 2.x – Uroc327

+0

Но я постараюсь компиляцию завтра :) – Uroc327

0

Сначала поставьте python2 или python3 на #!. На * nix, когда вы пытаетесь «выполнить» файл напрямую, ОС должна прочитать строку и выбрать правильный двоичный файл. В Windows опустите 'usr/bin/env и используйте py.exe для запуска файла, который теперь установлен с установщиком PSF CPython. Пример: tem.py содержит

#! python2 
import sys; print(sys.version) 

В командной строке

C:\Users\Terry>py /programs/python34/tem.py 
2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] 

Если изменить 2 до 3 в файле, выходные изменения в 3.4.2.

+0

Вопрос в том, как я могу определить, какую версию python следует использовать для определенного скрипта. Проверяем, используется ли 'print' или' print() '. – Uroc327