2014-12-03 2 views
1

Недавно я обновился до python 3.4, чтобы использовать инструменты континуума, но многие из моих скриптов написаны для 2.7. Это может вызвать некоторые ошибки; некоторые простые (например, «печать» теперь требует круглых скобок), а другие являются более сложными:Запуск нескольких питонов

if struct.unpack("h", "\0\1")[0] == 1: 
    defs.append(("WORDS_BIGENDIAN", None)) 

Вырабатывает ошибку:

File "setup.py", line 302, in build_extensions 
    if struct.unpack("h", "\0\1")[0] == 1: 
    TypeError: 'str' does not support the buffer interface 

Есть ли способ запустить свой питона код как 2.x как вы можете с C++ (-std = C++ 11 и т. д.)? Возможно, наступит еще много ошибок, если я просто разрешу это. Благодаря!

+0

Я думаю, что нет. Вам нужно будет его перенести. Но для этого есть инструменты. –

+1

Существует конвертер '2to3.py', который поставляется с python 3, который попытается обновить ваш код для вас, для одного. Но, вероятно, вам придется работать и на себя. –

+0

@ACSutton Пожалуйста, не забудьте проголосовать за полезные ответы и комментарии и отметить ответ, который решает вашу проблему как «Принято». –

ответ

0

Python 3 действительно другой язык, чем Python 2. Там нет никакого способа, чтобы интерпретатор Python 3 запустить Python 2 кода (если этот код не не Happ ru, чтобы использовать любую из функций, которые были изменены).

Возможно, вы захотите прочитать guide to porting to Python 3 в документации на Python. Вот краткий обзор текущих рекомендаций:

  • Если вам нужно только для поддержки Python 3 теперь (вам не нужно поддерживать совместимость Python 2), используйте инструмент 2to3 перевести большую часть вашего кода, затем вручную исправить то, что он пропустил. Существует много документации, которая объясняет изменения между версиями, если вы раньше не использовали Python 3.
  • Если вы пишете новый код и должны иметь возможность запускать его с помощью обеих версий Python, напишите для Python 3 (или общее подмножество из 2 и 3) и обратного вызова на Python 2 по мере необходимости.
  • Если у вас есть существующая кодовая база Python 2 и вы хотите запустить ее на Python 3 без нарушения совместимости с Python 2, используйте библиотеки, такие как six и from future, чтобы помочь вам перенести свой код на общее подмножество двух версий Python. 2to3 и другие инструменты, такие как modernize, помогут вам найти места, которые вы можете улучшить. Обратите внимание, что сделать эту работу проще, если отказаться от поддержки старой версии Python 2.
+0

Прискорбно, что это так. 2to3 представляется очень несовершенным инструментом. Я буду играть с «шестью» и «из будущего», чтобы узнать, помогут ли они. – so860

1

Если вы установили несколько версий, вы можете изменить первую строку вашего питона сценария явно использовать 2.x или 3.x:

Для Python 2.x сценария:

#!/usr/bin/env python2 

или, для питона 3.x сценария:

#!/usr/bin/env python3 
+0

Можете ли вы подтвердить, что это работает? Я получаю сообщение об ошибке "bash: ./program_name.py: Permission denied" – so860

+0

Да, я только что попробовал это в своей оболочке. Обратите внимание, что это будет работать, только если в вашей системе установлены как python2, так и python3.Аналогично, при запуске python с консоли вы можете явно запустить интерактивный сеанс python, вызывая 'python2' или' python3'. –

+0

Спасибо, но я все еще получаю ошибку. Я пытаюсь добавить модуль Image в свой дистрибутив Python 3.4, но в дополнение к тому, что он не поддерживается явно в Python 3.4, он может вообще не работать ... – so860

Смежные вопросы