2011-08-29 7 views
19

이 질문의 다른 측면에 대한 많은 게시물이 있지만 모두 함께 가져 오는 게시물을 보지 못했습니다.Python 배포 모범 사례 - 여러 버전, 표준 설치 위치, 패키징 도구 등

첫 번째 주관적인 성명서 : 우리가 통역사를 벗어나 배치 문제를 해결하기 시작할 때 파이썬 언어로 작업 할 때 경험하게되는 단순함처럼 보입니다. 같은 컴퓨터에 여러 버전의 Python을 설치하는 가장 좋은 방법은 무엇입니까? 패키지는 어디에 설치해야합니까? Disutils 대 setuptools 대 pip 등 Python의 Zen이 배포와 관련하여 매우 악용되고있는 것처럼 보입니다. 나는 Windows에서 "DLL 지옥"경험의 무시 무시한 메아리를 느낀다.

전문가들은 이러한 질문에 대해 어느 정도 모범 사례에 동의합니까?

동일한 컴퓨터에서 여러 버전의 Python을 실행합니까? 어떻게 공존 할 수 있다고 확신합니까? 최신 버전은 이전 버전 (예 : OS 공급 업체가 제공하는 스크립트)에 의존하는 다른 프로세스의 가정을 깨지 않습니다. 이거 안전한가요? virtualenv로 충분합니까?

로컬 파일 시스템에서 파이썬 환경의 다른 구성 요소 (타사 패키지 포함)의 위치에 가장 적합한 선택은 무엇입니까? Unixy 및 Windows OS의 여러 버전에 대한 위치간에 엄격하거나 대략적인 일치가있을 수 있습니까?

그리고 늪지대 중에서 가장 murkiest 한 구석 - 설치 도구는 무엇을 사용합니까 (setuptools, distutils, pip 등), 파일 위치, Python 가상 환경, Python 경로 등 선택 사항과 잘 어울립니다.

이 질문은 어려운 질문과 같습니다. 필자는 경험 많은 Pythonistas가 이러한 과제에 대해 정식 접근법 (또는 2 가지)을 정의했기를 희망한다. 자신감을 갖고 사용할 수있는 시스템 (서로 관련이없는 별도의 도구가 아닌)을 "함께 묶어"사용하는 방법은 매우 유용합니다.

+1

이 질문은 지나치게 광범위한 정의라고 생각합니다. – agf

+0

이 질문을 한 후에, 나는 virtualenvwrapper의 팬이되었다. 이것은 내가 물어 본 많은 문제점들을 단순화시킨다. 각 변종 배포 도구에는 여전히 이상한 문제가 있지만 신속하게 전환 할 수있는 벽으로 막힌 Python 환경을 사용하면 많은 도움이됩니다. –

답변

2

나는 이것이 상당히 광범위한 질문에 동의하지만 어쨌든 많은 부분을 다루려고 노력할 것이다.

주관적인 성명에 관하여 : 파이썬의 단순함과 우아함이 포장과 배포 문제가 갑자기 단순한 것이되어야한다는 것을 암시하는 이유는 모르겠다. 포장과 관련된 몇 가지 사항은 간단하고 다른 것은 불가능하며 다른 것은있을 수 있습니다. 완전하고 견고하며 간편한 패키징 시스템이 있다면 사용자에게 가장 적합 할 것입니다. distutils가 만들어지고 그 개발이 일시 중지되면 setuptools가 만들어져 새로운 솔루션과 새로운 문제가 추가되고 사회 문제 때문에 setuptools에서 배포되고 distutils2가 하나의 공식 라이브러리로 만들어졌습니다.(Differences between distribute, distutils, setuptools and distutils2?에 대한 자세한 내용) 상황은 개발자와 사용자에게 이상적이지 않지만 우리는 더 잘 만들고 있습니다.

동일한 컴퓨터에 여러 버전의 Python을 설치하는 가장 좋은 방법은 무엇입니까? 최신 OS를 사용하는 경우 패키지 관리자를 사용하거나 UNIX의 소스에서 컴파일하는 경우 "make altinstall"을 사용하거나 Windows의 소스에서 컴파일하는 경우 유사한 비 충돌 설치 체계를 사용하십시오. 데비안 사용자는 "pythonX.Y"를 사용하여 개별 버전을 호출 할 수 있으며 기본 버전 ("python"및 "python3")은 데비안 개발자가 결정한다는 것을 알고 있습니다. 몇 가지 OS가 python == python2라는 가정을 깨기 시작 했으므로 축하하거나 비난하기 위해 진행중인 PEP가 있습니다 : http://www.python.org/dev/peps/pep-0394/ Windows는 하나의 Python 버전을 기본값으로 사용하는 방법이 부족하여 다른 PEP가 있습니다. http://www.python.org/dev/peps/pep-0397/

패키지를 어디에 설치해야합니까? distutils를 사용하여 프로젝트를 내 사용자 사이트 패키지 디렉토리에 설치할 수 있습니다 (PEP 370 또는 docs.python.org 참조). 정확히 그 질문은 무엇입니까?

동일한 프로젝트의 다른 버전을 병렬 설치하는 것은 지원되지 않습니다. 수입 체계와 포장 도구에 대한 변경 사항을 논의하기 위해서는 PEP가 필요합니다. 누군가가 토론을 시작하기 전에 virtualenv 또는 buildout을 사용하면 충분합니다.

"Python 환경의 구성 요소"의 위치에 대한 질문을 이해할 수 없습니다.

대부분 시스템 패키지를 사용합니다 (예 : Debian의 Aptitude 패키지 관리자 사용). 프로젝트를 시험하기 위해, 나는 그들의 저장소를 복제한다. Aptitude에서 사용할 수없는 무언가가 필요하면 내 사용자 site-packages 디렉토리에 설치 (또는 repo에 .pth 파일 넣기)하십시오. 사용자 정의 PYTHONPATH가 필요하지 않지만 PYTHONUSERBASE를 사용하여 내 사용자 사이트 패키지의 위치를 ​​변경했습니다. 나는 setuptools/distribute에서 마법과 달걀 개념을 좋아하지 않으므로 사용하지 않습니다. 나는 virtualenv와 pip를 하나의 프로젝트에 사용하기 시작했다. (그들은 커버 아래 setuptools를 사용하지만 개인적인 설치로 내 파이썬에는 setuptools가 없다.)

0

이 영역에 대한 하나의 리소스는 Tarek Ziade의 Expert Python Programming입니다. 나는 책의 품질에 대해 모호하지만, 다루는 주제는 당신이 집중하고있는 것입니다.

8

동일한 컴퓨터에서 여러 환경을 구성하고 유지 관리하는 유일한 방법은 virtualenv입니다. 그것은 심지어 환경을 포장하고 다른 기계에 설치하는 방법으로 가지고 있습니다.

패키지 관리를 위해 나는 virtualenv으로 잘 작동하므로 항상 pip을 사용합니다. 또한 git 저장소와 같은 다양한 소스에서 패키지를 쉽게 설치하고 업그레이드 할 수 있습니다.