2020 년 3 월 현재이 질문에 대한 다른 답변의 대부분은 오래되었습니다. Python 패키징 문제에 대한 조언을 구할 때는 발행 날짜를 확인하고 구식 정보를 신뢰하지 마십시오.
파이썬 포장 사용 설명서는 가치가 읽기입니다. 모든 페이지에는 "마지막 업데이트"날짜가 표시되므로 설명서의 최신 성을 확인할 수 있으며 매우 포괄적입니다. Python Software Foundation의 python.org 하위 도메인에서 호스팅된다는 사실은 신뢰를 더합니다. 프로젝트 요약 페이지는 여기에 특히 관련이있다.
도구 요약 :
다음은 Python 패키징 환경에 대한 요약입니다.
지원되는 도구 :
distutils
여전히 파이썬으로 패키징하기위한 표준 도구입니다. 표준 라이브러리 (Python 2 및 Python 3)에 포함되어 있습니다. 간단한 Python 배포에는 유용하지만 기능이 부족합니다. 스크립트 distutils
에서 가져올 수있는 Python 패키지를 소개합니다 setup.py
.
setuptools
Distutils의 한계를 극복하기 위해 개발되었으며 표준 라이브러리에 포함되어 있지 않습니다. 라는 명령 줄 유틸리티가 도입되었습니다 easy_install
. 또한 도입 setuptools
하여 수입 할 수 파이썬 패키지 setup.py
스크립트 및 pkg_resources
데이터 파일을 찾을 수 코드에서 가져올 수 있습니다 파이썬 패키지는 배포판에 설치되어 있어야합니다. 그 중 하나는 distutils
파이썬 패키지를 원숭이 패치한다는 것 입니다. 잘 작동합니다 pip
. 정식 릴리스가 표시됩니다.
scikit-build
내부적으로 CMake를 사용하여 컴파일 된 Python 확장을 빌드하는 개선 된 빌드 시스템 생성기입니다. scikit-build는 distutils를 기반으로하지 않기 때문에 실제로 제한이 없습니다. 닌자 빌드가 있으면 scikit-build는 대안보다 3 배 이상 큰 프로젝트를 컴파일 할 수 있습니다. 잘 작동합니다 pip
.
distlib
와 같은 고급 도구에서 사용하는 기능을 제공하는 라이브러리입니다 pip
.
packaging
같은 높은 수준의 도구가 사용하는 기능을 제공하는 라이브러리도 pip
하고setuptools
더 이상 사용되지 않거나 중단 된 도구 :
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
, setuptools
와 distutils2
.
추천:
이 모든 것이 당신에게 새로운, 당신은 어디서부터 시작할지 모르신다면, 나는 학습 추천setuptools
과 함께 pip
하고 virtualenv
,하는 모든 작업을 아주 잘 함께.
당신이에 찾고 있다면 virtualenv
, 당신은이 문제에 관심이있을 수 있습니다 사이의 차이점은 무엇입니까 venv
, pyvenv
, pyenv
, virtualenv
, virtualenvwrapper
, 등? . (예, 알고 있습니다. 신음합니다.)