2014-12-03 7 views
1

최근에 연속체 도구를 사용하기 위해 파이썬 3.4로 업그레이드되었지만 많은 스크립트는 2.7 용으로 작성되었습니다. 이로 인해 오류가 발생할 수 있습니다. 일부는 ("인쇄"이제 괄호가 필요 같은) 간단하지만 다른 사람은 더 복잡 :다수의 비단뱀 실행하기

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로 내 파이썬 코드를 실행하는 방법이 있나요 :

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

오류를 얻을 수 C++로 할 수있는 것처럼 (-std = C++ 11 등)? 이 문제를 해결하면 더 많은 오류가 발생할 수 있습니다. 감사!

+0

나는 생각하지 않습니다. 이식해야합니다. 그러나이를위한 도구가 있습니다. –

+1

python 3과 함께 제공되는'2to3.py' 변환기가 있습니다.이 변환기는 코드를 업데이트하려고 시도합니다. 그러나 아마도 당신 자신도해야 할 일이있을 것입니다. –

+0

@ACSutton 유용한 답변과 의견을 표결하고 문제를 해결하는 대답을 "수락 됨"으로 표시하십시오. –

답변

0

파이썬 3는 그 코드가 햅을하지 않습니다하지 않는 한 (파이썬 3 인터프리터 실행 파이썬 2 코드를 만들 수있는 방법은 없습니다 정말 파이썬 2가 아닌 다른 언어입니다 변경된 기능을 사용하는 경우).

파이썬 설명서에서 guide to porting to Python 3을 읽고 싶을 수도 있습니다. 여기에 현재의 권고 사항에 대한 간략한 요약이다 :

  • 만 (파이썬 2의 호환성을 유지 할 필요가 없습니다) 지금부터 파이썬 3를 지원해야하는 경우, 코드의 대부분을 변환하는 2to3 도구를 사용하여, 그런 다음 놓친 부분을 수동으로 수정하십시오. 이전에 Python 3을 사용하지 않았다면 버전 사이의 변경 사항을 설명하는 문서가 많이 있습니다.
  • 새로운 코드를 작성하고 두 버전의 Python으로 실행할 수 있어야하는 경우 필요에 따라 Python 3 (또는 공통 부분 집합 2와 3)과 백 포트를 Python 2에 작성하십시오.
  • 기존 Python 2 코드베이스가 있고 Python 2 호환성을 깨지 않고 Python 3에서 실행하려면 sixfrom future 가져 오기와 같은 라이브러리를 사용하여 코드를 두 버전의 Python의 공통 하위 집합으로 이식하는 데 도움이됩니다. 2to3modernize과 같은 다른 도구를 사용하면 개선 할 수있는 장소를 찾는 데 도움이됩니다. 이전 버전의 Python 2에 대한 지원을 중단하면이 작업을 더 쉽게 할 수 있습니다.
+0

이런 경우는 유감입니다. 2to3은 매우 불완전한 도구 인 것 같습니다. 나는 '6'과 'fromfuture'와 함께이 게임이 도움이되는지 알아볼 것입니다. – so860

1

당신은 여러 버전이 설치되어있는 경우, 당신은 명시 적으로 2.x 또는 3.x를 사용하도록 파이썬 스크립트의 첫 번째 줄 변경할 수 있습니다

#!/usr/bin/env python2 
: 파이썬 2.x는 스크립트

또는, 파이썬 3.x의 스크립트 :

#!/usr/bin/env python3 
+0

이것이 작동하는지 확인할 수 있습니까? "bash : ./program_name.py : Permission denied"오류가 발생합니다. – so860

+0

예, 방금 쉘에서 시도했습니다. 이 옵션은 시스템에 python2와 python3을 모두 설치 한 경우에만 작동합니다.마찬가지로, 콘솔에서 파이썬을 실행할 때'python2' 또는'python3'을 호출하여 대화 형 파이썬 세션을 명시 적으로 실행할 수 있습니다. –

+0

고마워요,하지만 여전히 오류가 발생합니다. 이미지 모듈을 파이썬 3.4 배포본에 추가하려고하지만, 파이썬 3.4에서 명시 적으로 지원되지 않는 것 외에 전혀 작동하지 않을 수도 있습니다 ... – so860