2013-06-11 1 views
1

파이썬 2와 파이썬 3 모두에서 작동하도록 작성된 파이썬 라이브러리가 있는데, 모든 버전 특정 코드는 두 가지 변형 Python 2 용 소스 코드 파일과 Python 3 용 파일입니다. 각 파일에는 잘못된 Python 버전으로 가져온 경우 SyntaxError를 발생시키는 코드가 들어 있습니다.버전 별 (2/3) 코드로 파이썬 라이브러리 패키징

내 라이브러리를 distutils로 패키지하고 설치할 때 하나 또는 다른 파일에 대한 구문 오류 보고서가 표시됩니다. 이걸 없애는 방법이 있습니까? 이상적으로는 distutils/setuptools에게 현재 실행중인 Python 버전이 아닌 파일을 무시하라고 말하고 싶습니다.

+0

두 파일을 병합하지 않는 이유는 무엇입니까? 둘 중 하나에서 실행되는 코드를 작성하는 것이 완벽하게 실현 가능합니다. –

+0

그게 제가 대부분의 모듈에서했던 것입니다. 그러나 한 버전에서 뭔가 다른 구문 오류가 필요한 경우 파일을 따로 보관해야합니다. 예를 들어 파이썬 3에서는 "del exec"를해야하는데 파이썬 2에서는 exec가 키워드 인 구문 오류입니다. – khinsen

+0

왜 'exec' *를 모두 사용해야합니까? –

답변

0

distutils는 빌드 및/또는 설치 시간에 모든 모듈을 가져 와서 바이트 컴파일 (즉, pyc 파일 및 pyo 파일 만들기)합니다. 현재 모듈을 건너 뛰는 옵션이 없습니다. Python 2와 Python 3에서 다른 sdist가 생성되도록 설정 스크립트를 작성할 수 있습니다 (예를 들어 somemodule2.py는 Python 3 sdist에 포함되지 않습니다). 그러나 모든 도구가 PyPI를 포함한 다른 sdists에서 잘 작동하는 것은 아닙니다.

현재 파이썬 2 또는 3으로 가져올 때 각 모듈이 SyntaxError를 발생시키지 않도록하려고합니다. 끝나면 6 개의 모듈을 사용하여 Martijn의 조언을 따르고 하나의 모듈 만 작성할 수 있습니다. 결과는 너무 지저분하지 않습니다. (나는 정말 끔찍한 2/3 코드를 보았 기 때문에 그 해결책은 맘에 들지 않지만, 커뮤니티의 큰 부분은 효과가 있기 때문에 그것을 선택했습니다).