Я не думаю, что вы найдете его.Вместо этого лучше всего использовать #!синтаксис, чтобы указать, какой Python вы хотите использовать и использовать 2to3, когда вы будете готовы к каждому.(Если вы работаете в Windows, посмотрите Python launcher , чтобы немного облегчить сосуществование.)
У меня есть один модуль, который я написал, который должен работать как с 2, так и с 3;и у меня есть код в верхней части, который выглядит следующим образом:
import sys
PYTHON3 = sys.version_info.major == 3
PYTHON2 = sys.version_info.major == 2
if PYTHON2:
import StringIO
stringio = StringIO.StringIO
bytesio = StringIO.StringIO # In Python2, stringIO takes strings of binary data
import urllib2
URL_open = urllib2.urlopen
HTTPError = urllib2.HTTPError
if PYTHON3:
import io
stringio = io.StringIO
bytesio = io.BytesIO # In Python3, use BytesIO for binary data
import urllib.request
URL_open = urllib.request.urlopen
import urllib.error
HTTPError = urllib.error.HTTPError
и разбросан по таким вещам, как:
if PYTHON2:
f = stringio(self.XMLData)
if PYTHON3:
f = bytesio(self.XMLData.encode(encoding="utf-8"))
Это не так, как есть способ выразить строку, которая будет работать в обоихсистемы.Вам нужно много исправлений, как это.Это действительно того не стоит, если у вас нет варианта использования (подобного этому), когда есть какая-то причина, по которой вы должны поддерживать оба Python2 и Python3 в одном модуле.
Мой вариант использования был относительно простым. аналогичный вопрос , на который вы ссылаетесь, указывает на главу «Погружение в Python» «Портирование кода на Python 3 с 2to3» , которая показывает, насколько разные вещи, большая часть которых составляет несовместимо отличается, требуя много условного кодирования, как указано выше.Я не рекомендовал бы это.