Поддержка различных версий Python

Я думаю, что Вы правы: Lisp был удобным инструментом для того, чтобы изрубить вещи. Это вызвано тем, что это не различало очень программу и данные. Это позволило хакерам управлять функциями очень легко, точно так же, как данные.

, Но шепелявость является довольно трудным для людей читать, с ее фигурными скобками и неразличием между данными и программой. Сегодня, я не буду использовать шепелявость ни для какого производственного кода AI (или возможно даже моделирующий), но очень предпочел бы Python для сценариев.

Другой вещью рассмотреть являются существующие библиотеки/инструменты, in/related на язык. Я не имею возможности сравнивать библиотеки шепелявости с библиотеками Python, но я предполагаю, что библиотеки и открытый исходный код имеют большое значение больше теперь, чем прежде.

Этот ответ был вдохновлен следующим сравнением между шепелявостью и Python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html

9
задан Ram Rachum 9 December 2009 в 14:11
поделиться

5 ответов

Да, вам нужно написать для Python 2.4 синтаксис, чтобы поддерживать все версии 2.4–2.7 в той же кодовой базе.

Некоторые изменения в Python 2.6 и 2.7 направлены на то, чтобы немного упростить его напишите совместимый код с 3.x, но для этого необходимо отказаться от поддержки 2.5 и ниже.

1
ответ дан 5 December 2019 в 02:07
поделиться

Кажется, есть разные ответы на вашу проблему.

Во-первых, если вы хотите предложить все функции для всех версий python, тогда да, вы, вероятно, застряли в использовании минимально возможного подмножества функций - поэтому вы пишете свой код для Python 2.4. Или вы можете выполнить обратный перенос функций из новых интерпретаторов, если они являются чистым питоном (это не относится к диспетчерам контекста или сопрограммам).

Или вы можете разделить поддержку версий на функции - если вы считаете, что есть одна (необязательная) функция, которая иметь большую выгоду от, скажем, диспетчеров контекста, вы можете сделать его доступным в отдельном модуле и просто сказать, что у пользователей 2.4 нет этой функции.

Для поддержки Python 3 взгляните на помощник 2to3, если вы правильно напишете там свой код '

1
ответ дан 5 December 2019 в 02:07
поделиться

Вы можете попробовать virtualenv и распространять свое приложение, используя одну версию Python. Однако в вашем случае это может оказаться практичным или непрактичным.

0
ответ дан 5 December 2019 в 02:07
поделиться

Если различия между версиями не являются значительными, вы можете попробовать изолировать их в отдельном пакете или модуле, в котором вы пишете код для конкретной версии, который действует как уровень адаптации.

Это можно сделать без отдельного модуля в простых случаях, например, когда новая версия Python делает стандартный пакет, который раньше был внешним, например, simplejson. У нас есть что-то похожее на это в некотором коде:

try:
    import simplejson as json
except ImportError:
    import json

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

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

Определенно наличие отдельных кодовых баз - худшее, что вы можете сделать, поэтому я определенно рекомендую поработать От этого. По крайней мере, не используйте произвольно функции из более новых версий Python, так как, хотя может показаться приятным иметь их в коде (возможно, упрощая конкретный блок логики), тот факт, что вам придется дублировать эту логику, разветвляя кодовая база, даже для одного модуля, будет более чем сводить на нет преимущества.

Мы придерживаемся старых версий для устаревшего кода, настройка по мере выхода новых выпусков для их поддержки, но с сохранением поддержки старых, иногда с небольшими уровнями адаптера. В какой-то момент в расписании появляется крупный выпуск нашего кода, и мы решаем, не пора ли отказаться от поддержки более старого Python. Когда это происходит, мы пытаемся перепрыгнуть через несколько версий, переходя (например) с 2.4 на 2.6 напрямую, и только после этого действительно начинаем использовать преимущества нового синтаксиса и неадаптируемых функций.

0
ответ дан 5 December 2019 в 02:07
поделиться

Прежде всего, вы должны иметь в виду, что Python 2.x в основном использует тот же синтаксис, который является обратно совместимым, за исключением новых функций и дополнений. Есть и другие вещи, которые следует учитывать, которые не обязательно являются ошибками, например сообщения DeprecationWarning, которые, хотя и не причиняют вреда, являются некрасивыми и могут вызвать путаницу.

Python 3.x обратно несовместим по своей конструкции и намеревается оставить позади весь старый мусор. Python 2.6 внес много изменений, которые также есть в Python 3.x, чтобы облегчить переход. Чтобы увидеть их все, я бы рекомендовал прочитать документ Что нового в Python 2.6 . По этой причине очень возможно написать код для Python 2.6, который также будет работать в Python 3.1, но это не без оговорок.

Даже между двумя версиями существует множество незначительных синтаксических изменений. x, которые потребуют, чтобы вы обернули большую часть своего кода в , попробуйте / , кроме блоков , так что, если это то, что вы готовы сделать, тогда имея 2.x и 3 Ветка .x вполне возможна. Я думаю, вы обнаружите, что будете выполнять множество тестов атрибутов и типов на своих объектах, чтобы делать то, что вы хотите.

Я бы порекомендовал вам ознакомиться с кодом основных проектов, поддерживающих различные версии Python. Twisted Matrix - первое, что приходит на ум. Их код - прекрасный пример того, как должен быть написан код Python.

В конце концов, то, что вы собираетесь делать, будет нелегким, так что приготовьтесь к большому количеству работы!

так что, если это то, что вы хотите сделать, то создание веток 2.x и 3.x вполне возможно. Я думаю, вы обнаружите, что будете выполнять множество тестов атрибутов и типов на своих объектах, чтобы делать то, что вы хотите.

Я бы порекомендовал вам ознакомиться с кодом основных проектов, поддерживающих различные версии Python. Twisted Matrix - первое, что приходит на ум. Их код - прекрасный пример того, как должен быть написан код Python.

В конце концов, то, что вы собираетесь делать, будет нелегким, так что приготовьтесь к большому количеству работы!

так что, если это то, что вы хотите сделать, тогда вполне возможно наличие веток 2.x и 3.x. Я думаю, вы обнаружите, что будете выполнять множество тестов атрибутов и типов на своих объектах, чтобы делать то, что вы хотите.

Я бы порекомендовал вам ознакомиться с кодом основных проектов, поддерживающих различные версии Python. Twisted Matrix - первое, что приходит на ум. Их код - прекрасный пример того, как должен быть написан код Python.

В конце концов, то, что вы собираетесь делать, будет нелегким, так что приготовьтесь к большому количеству работы!

Я бы порекомендовал вам ознакомиться с кодом основных проектов, поддерживающих различные версии Python. Twisted Matrix - первое, что приходит на ум. Их код - прекрасный пример того, как должен быть написан код Python.

В конце концов, то, что вы собираетесь делать, будет нелегким, так что приготовьтесь к большому количеству работы!

Я бы порекомендовал вам ознакомиться с кодом основных проектов, поддерживающих различные версии Python. Twisted Matrix - первое, что приходит на ум. Их код - прекрасный пример того, как должен быть написан код Python.

В конце концов, то, что вы собираетесь делать, будет нелегким, так что приготовьтесь к большому количеству работы!

0
ответ дан 5 December 2019 в 02:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: