Мои читатели знают, что я люблю язык Перл. К Питону по этой причине равнодушен: надо, использую. Хотя мне нравится писать так, как я хочу (при необходимости следуя правилам стиля), а не ставить четыре пробела, потому что так решила чья-то умная голова. Равно как я хочу одеваться как мне хочется (следуя дресс-коду при необходимости), а не ходить в пришитой шкуре. Уайтспейс не должен влиять на логику программы. А красивые отступы восстанавливаются по синтаксису в ДВА нажатия на клавиши в любом другом языке. Впрочем, это мое личное мнение.
Но вот мне понадобилось собрать пакет чужого софта после обновления кластера, и я в шоке от увиденного. Такое змеиное отношение к своим пользователям...
Давно уже объявлено, что надо использовать питон3, а питон2 устарел. Прекрасно, только почему же новые сборки питон2 не распознают исходники на питон3, и, тем более, почему питон3 не распознает, что исходник на старом питоне?
Для сравнения, перл6, который вообще теперь называется Raku, умеет работать с перл5. А любой перл, увидев шебанг (что-то вроде решетка!путь_к_интерпретатору в начале файла), передает исходник по назначению. Поэтому и есть шутка, что Перл умеет работать и с башем, и с Руби, и с Питоном. Это простая вежливость, я так считаю!
Ладно. В ходе сборки запускаются два скрипта на питоне. Один использует пакет numpy, который в той системе только под питон3! Он выдает ошибку с ссылкой на веб-страницу, где никаких указаний я не нашел. Хоть бы сказал "питон3 надо". Не сказал.
Как я изящно решил эту несложную проблему, скажу чуть позже. Идем дальше.
Текст-то на питоне2! А теперь нельзя, например, print без скобок. Чья-то умная голова решила, что нельзя - и нельзя. Никаких not recommended, deprecated: просто нет и все. Для сравнения, в Фортране некоторые компиляторы до сих пор поддерживают официально удаленные из стандарта конструкции.
Мне нетрудно поставить в сорока семи местах скобочки, у меня есть Вим, да и Перл под боком. Но дальше интереснее.
Теперь нету метода .has_key. Чья-то умная голова решила, что по-питонски будет a in b, а не b.has_key(a), и теперь так. Раньше было питоново так, а теперь так не питоново, а значит - переписывай. Ну, переписал и это. Не проблема переписать, вопрос в отношении.
Но последнее меня добило насовсем. Теперь доступ к словарю через квадратные скобочки выдает ошибку, если ключа нет. Раньше было норм, а теперь это бух. Ладно, использовать значение по умолчанию слишком сложно для нежной души нынешних программистов, ладно, но почему правильная логика не заложена в новую конструкцию, а старая бы осталась как была для совместимости? Но нет.
А разбираться, откуда словарь взялся, есть ли там этот ключ и что будет, если нет, мне совсем не хотелось. Заменил конструкцию и все заработало. Но это я знал, что там нет ошибок и все работает, а если бы не знал? Эх...
Второй скрипт тоже начал обижаться, но он numpy не использовал, так что питон2 его сгрыз без проблем. В итоге, мне надо было один скрипт отправить питону-3, а второй питону-2, причем все это из недр сборочного скрипта на bash.
Как я поступил, спросите вы? Я решил, что старый добрый Перл должен завязать этих разновозрастных змеек узлом, и заменил глобально python на perl и вставил шебанги, указывающие на соответствующий интерпретатор в каждый скрипт.
Изящно, я считаю. Перл и передал исходник кому следует. Можно было и напрямую заменить, но так красиво, мне кажется.
Впрочем, когда мне надо - я Питон использую. Например, рисовалку NCL недавно перевели со своего довольно своеобразного языка на Питон, а учить еще один скриптовый язык мне совсем не хотелось. Теперь рисую на Питоне. Жаль, что не Перл... но тоже ничего.