[python] 배포, distutils, setuptools 및 distutils2의 차이점은 무엇입니까?

그 상황

오픈 소스 라이브러리를 Python 3으로 이식하려고합니다 ( 누구나 궁금한 경우 SymPy ).

따라서 2to3Python 3을 빌드 할 때 자동으로 실행 해야합니다 distribute. 그렇게하려면을 사용해야 합니다. 따라서 (doctest에 따라) 현재 시스템을 포팅해야합니다 distutils.

문제

불행하게도, 나는 확실히 이러한 모듈 -의 차이는 무엇 아니에요 distutils, distribute, setuptools. 문서는 모두 서로의 포크 인 것처럼 보이며 대부분의 상황 (그러나 실제로는 전부는 아님) 등에서 호환되도록 의도 된 것이므로 스케치가 가장 좋습니다.

질문

누군가 차이점을 설명 할 수 있습니까? 무엇을 사용해야합니까? 가장 현대적인 솔루션은 무엇입니까? (제쳐두고, 나는 또한 포팅에 대한 몇 가지 가이드를 고맙게 생각 Distribute하지만, 그것은 질문의 범위를 벗어난 것입니다 …)



답변

2020 년 3 월 현재이 질문에 대한 다른 답변의 대부분은 오래되었습니다. Python 패키징 문제에 대한 조언을 구할 때는 발행 날짜를 확인하고 구식 정보를 신뢰하지 마십시오.

파이썬 포장 사용 설명서는 가치가 읽기입니다. 모든 페이지에는 “마지막 업데이트”날짜가 표시되므로 설명서의 최신 성을 확인할 수 있으며 매우 포괄적입니다. Python Software Foundation의 python.org 하위 도메인에서 호스팅된다는 사실은 신뢰를 더합니다. 프로젝트 요약 페이지는 여기에 특히 관련이있다.

도구 요약 :

다음은 Python 패키징 환경에 대한 요약입니다.

지원되는 도구 :

더 이상 사용되지 않거나 중단 된 도구 :

  • distribute의 포크였다 setuptools. 동일한 네임 스페이스를 공유하므로 배포를 설치 한 경우 import setuptools실제로 배포와 함께 배포 된 패키지를 가져옵니다. Distribute는 Setuptools 0.7로 다시 병합 되었으므로 더 이상 Distribute를 사용할 필요가 없습니다. 실제로 Pypi의 버전은 Setuptools를 설치하는 호환성 계층 일뿐입니다.

  • distutils2최선을 시도했다 distutils, setuptools그리고 distribute파이썬의 표준 라이브러리에 포함 된 표준 도구를하고이된다. 아이디어는 distutils2이전 Python 버전에 배포되고 표준 라이브러리에 포함되는 Python 3.3 distutils2으로 이름이 변경되었습니다 packaging. 그러나 이러한 계획은 의도 한대로 진행되지 않았으며 현재 distutils2는 포기 된 프로젝트 입니다. 최신 버전은 2012 년 3 월에 출시되었으며 Pypi 홈페이지는 최종적으로 사망에 맞게 업데이트되었습니다.

기타 :

관심이 있으시면 Python Packaging User Guide의 Project Summary 를 읽으십시오 . 그 페이지를 반복하지 않도록하고 있었다 단지에 대한 질문에 일치하는 답을 유지하기 위해, 그들 모두를 나열하지 않습니다 distribute, distutils, setuptoolsdistutils2.

추천:

이 모든 것이 당신에게 새로운, 당신은 어디서부터 시작할지 모르신다면, 나는 학습 추천setuptools 과 함께 pip하고 virtualenv,하는 모든 작업을 아주 잘 함께.

당신이에 찾고 있다면 virtualenv, 당신은이 문제에 관심이있을 수 있습니다 사이의 차이점은 무엇입니까 venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, 등? . (예, 알고 있습니다. 신음합니다.)


답변

distutils 관리자이자 distutils2 / packaging 컨트 리뷰 터입니다. ConFoo 2011에서 Python 패키지에 대해 이야기했으며 요즘에는 확장 버전을 작성하고 있습니다. 아직 출판되지 않았으므로 여기에 물건을 정의하는 데 도움이되는 발췌문이 있습니다.

  • Distutils 는 패키징에 사용되는 표준 도구입니다. 단순한 요구에 대해서는 잘 작동하지만 제한적이기 때문에 확장하기가 쉽지 않습니다.

  • Setuptools 는 누락 된 distutils 기능을 채우고 새로운 방향을 탐색하려는 욕구에서 태어난 프로젝트입니다. 일부 하위 커뮤니티에서는 사실상 표준입니다. 파이썬 핵심 개발자들이 겪는 원숭이 패치와 마법을 사용합니다.

  • 배포 는 개발자의 개발 속도가 너무 느리고 진화 할 수 없다고 느끼는 개발자들이 시작한 Setuptools의 포크입니다. 동일한 그룹이 distutils2를 시작하면 개발 속도가 상당히 느려졌습니다. 2013 년 8 월 업데이트 : 배포가 setuptools로 다시 병합되어 중단되었습니다.

  • Distutils2 는 새로운 distutils 라이브러리로, distutils 코드베이스의 포크로 시작되었으며 설정 도구 (PEP에서 자세히 설명)에서 얻은 좋은 아이디어와 pip에서 영감을 얻은 기본 설치 프로그램으로 시작되었습니다. Distutils2를 가져 오는 데 사용하는 실제 이름 packaging은 Python 3.3+ 표준 라이브러리 또는 distutils22.4+ 및 3.1–3.2입니다. (백 포트는 곧 제공 될 예정입니다.) Distutils2는 Python 3.3 릴리스를 만들지 않았으며 보류되었습니다.

더 많은 정보:

곧 가이드를 마무리하겠습니다. 각 라이브러리의 강점과 약점에 대한 자세한 정보와 전환 가이드가 포함되어 있습니다.


답변

참고 : 답변이 더 이상 사용되지 않습니다. 배포는 더 이상 사용되지 않습니다. 이 답변은 Python Packaging Authority가 구성되어이를 정리하는 많은 작업을 수행 한 이후 더 이상 유효하지 않습니다.


그렇습니다. : -o 현재로서는 선호하는 패키지는 Distribute 인데, 이것은 distutils (원래 패키징 시스템)의 확장 인 setuptools의 포크입니다. Setuptools는 유지 관리되지 않았으므로 포크 및 이름이 바뀌었지만 설치되면 setuptools의 패키지 이름을 사용합니다! 나는 대부분의 파이썬 개발자들이 이제 Distribute를 사용한다고 생각합니다.


답변

나는 원래의 문제에서 의심의 여지가없는 가정을 다루지 않고 두 번째 질문에 답했다는 것을 알고 있습니다.

오픈 소스 라이브러리 (누구나 궁금한 경우 SymPy)를 Python 3으로 이식하려고합니다.이를 수행하려면 Python 3을 빌드 할 때 2to3을 자동으로 실행해야합니다.

당신은 할 수 있습니다 , 없습니다 필요 . 다른 전략은 http://docs.python.org/dev/howto/pyporting에 설명되어 있습니다.

그렇게하려면 배포를 사용해야합니다.

당신은 의 배포는 다른 방식으로의 distutils에게 (안 문서화 문자열) 코드에 대한 지원의 빌드 타임 2to3 변환을 🙂 : http://docs.python.org/dev/howto/pyporting#during-installation


답변

다행스럽게도 Continuum의 ” conda “패키지 관리자 가 Python 패키징 혼돈을 크게 정리 한 2014 년 후반에이 질문을 업데이트했습니다 .

특히, conda를 사용하면 conda ” 환경 “을 빠르게 만들 수 있습니다 . 다른 버전의 Python으로 환경을 구성 할 수 있습니다. 예를 들면 다음과 같습니다.

conda create -n py34 python=3.4 anaconda

conda create -n py26 python=2.6 anaconda

다른 버전의 Python으로 두 개의 ( “py34″또는 “py26”) Python 환경을 만듭니다.

이후에 다음을 사용하여 특정 버전의 Python으로 환경을 호출 할 수 있습니다.

source activate <env name>

이 기능은 다른 버전의 Python을 처리 해야하는 경우에 특히 유용합니다.

또한 conda에는 다음과 같은 기능이 있습니다.

  • 파이썬 불가지론
  • 크로스 플랫폼
  • 관리자 권한이 필요하지 않습니다
  • 스마트 종속성 관리 (SAT 솔버를 통해)
  • 링크해야 할 C, Fortran 및 시스템 레벨 라이브러리를 잘 처리합니다.

과학 컴퓨팅 분야에 있다면 마지막 요점이 특히 중요합니다.


답변