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


594

그 상황

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

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


문제

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


질문

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


22
얼마나 혼란 스럽습니까? Java / C ++ 배경에서 파이썬으로 왔습니다. 이러한 상황에서는 배포가 매우 간단합니다. 파이썬으로, 나는 모든 배포 시스템에 대해 완전히 혼란 스럽습니다.
Raffi Khatchadourian

75
필자는 파이썬 패키징 / 설치에 커뮤니티의 명확한 지시가없는 너무 많은 대안이 있음에 동의합니다.
Sabuncu

6
난 그냥 핍은 바이너리 배포판을 지원하지 않는에 관련 정보를 링크하고 싶었다 lucumr.pocoo.org/2012/6/22/hate-hate-hate-everywhere
pixelbeat

@pixelbeat pip는 휠 (이진 배포판) 설치를 지원하며 해당 링크가 최신 버전이 아닙니다.
Flimm

답변:


836

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, 등? . (예, 알고 있습니다. 신음합니다.)


2
@makeramen : 메일 링리스트에서이 스레드를 참조하십시오 .
Flimm

6
'Distribute' is a now deprecated fork of the 'Setuptools' project.@ PyPI Distribute 페이지는 더 나아 보이지 않습니다 .
KurzedMetal

3
SetupTools 사람들에 따르면 @KurzedMetal에 따르면 setuptools 0.7은 배포 및 이전 setuptools 복원 순서를 유니버스로 가정합니다. 실제로 상황은 상당히 향상 될 것입니다!
John McDonnell 2018 년

8
파이썬 포장 사용 설명서는 파이썬 포장의 상태에 대한 최신 정보를 제공합니다. 그것은 2013 년 PyCon 에서 Nick Coughlan에 의해 언급되었습니다 .
imanuelcostigan

1
@Flimm 마지막 편집은 꽤 오래 전입니다. 벤토는 지금까지 성숙합니까?
Martin Thoma

251

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 릴리스를 만들지 않았으며 보류되었습니다.

더 많은 정보:

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


1
아니요. distutils2는 표준화 (PEP) 이후에 setuptools / distribute에서 좋은 아이디어를 얻습니다 (예 : 개발 명령 및 자동 스크립트 생성을 추가하는 GSoC 학생을 멘토링 함). 교체 : 원하지 않는 부분이 있습니다 (계란, VCS 통합 등). distutils2에는 setuptools / distribute가 가지고 있지 않은 것들이 있습니다. 전환을 쉽게하기 위해 배포 개발자가 distutils2를 사용하여 새로운 표준과 도구를 지원할 수 있다고 생각합니다. 또한 setuptools 개발자가 새로운 표준을 지원하고 싶다고 말하는 것을 기억합니다.
Éric Araujo

1
이 모든 것에서 ez_setup은 어디에 속합니까? 또한 distutils2 상태에 대한 업데이트가 있습니까?
James McMahon

2
@ ÉricAraujo 지연에 대해 유감스럽게 생각합니다. 나는 그것이 3.4에 정시에 준비 되었기를 바란다! 나는 파이썬을 좋아 하지만 포장은 항상 벽에 머리를 부딪쳤다. (다른 소식으로, 가이드는 어떻게오고 있습니까? 끝났 으면 위의 답변에 링크 해 주시겠습니까?)
Zearin

9
@AlexisHuet이 주석은 아래 주석에 대한 링크가 포함되어 있으면 더 좋습니다 ( share단추 에서 얻을 수 있음 ).
erikbwork

2
distribute최근에 다시 병합 된 내용으로 답변을 업데이트해야합니다 setuptools. 많은 정보가 오래되었다는 사실은 혼란을 가중시킵니다
Amro

5

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


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


기록을 위해, 나는 지금 상황을 말했기 때문에이 대답을 받아 들였습니다 (그리고 포크는 다른 대답의 그림이 언급하지 않는 관계의 연장입니다). 그리고 길 어딘가에서 나는 문서 자체가 일반적으로 말하려는 것을 확신하지 못한다는 것을 배웠습니다.
VPeric

2
@VPeric, 실제로, 문서는 파이썬 의이 측면이 플럭스 / 혼란 상태에 있다는 사실을 반영합니다.
juanchopanza

2

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

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

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

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

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


감사합니다. 전환을 처리 할 스크립트를 작성하여 문제를 해결하기로 이미 결정했습니다. 그리고 예, 2to3을 사용하는 것보다 다른 옵션이 있다는 것을 알고 있었지만 SymPy는 복잡한 코드베이스 (마지막으로 확인했을 때 약 200k + 라인)이며 2to3을 사용하는 것이 유일한 현실적인 전략이었습니다. 어쨌든 다시 한번 감사드립니다!
VPeric

2

다행스럽게도 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 및 시스템 레벨 라이브러리를 잘 처리합니다.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.