문제

나는 최근 인터넷에서 많은 setuptools 강타를 보았습니다.가장 최근에 나는 James Bennett의 책을 읽었습니다. 포장시 아무도 setuptools를 사용해서는 안 되는 이유에 대해 게시하세요.Freenode에서 #python을 사용하면서 저는 그것을 절대적으로 싫어하는 영혼이 몇 명 있다는 것을 알고 있습니다.나는 그 중 하나라고 생각하지만 실제로는 그것을 사용합니다.

나는 부족한 점을 인식할 만큼 충분한 프로젝트에 대해 setuptool을 사용해 왔으며 더 나은 것을 선호합니다.나는 계란 형식과 그것이 어떻게 배포되는지 특히 좋아하지 않습니다.setuptools의 모든 문제로 인해 더 나은 대안을 찾지 못했습니다.

다음과 같은 도구에 대한 나의 이해 이는 easy_install 대체품(setuptools 아님)을 의미한다는 것입니다.실제로 pip는 일부 setuptools 구성 요소를 사용합니다. 그렇죠?

대부분의 패키지는 모든 종속성을 선언하는 setuptools 인식 setup.py를 사용합니다.준비가 되면 sdist, bdist 및 bdist_egg를 빌드하고 pypi에 업로드하겠습니다.

pip 사용으로 전환하려면 easy_install 종속성을 제거하기 위해 어떤 종류의 변경을 수행해야 합니까?종속성은 어디에 선언됩니까?나는 egg 형식을 사용하는 것에서 벗어나 소스 배포판만 제공해야 한다고 생각합니다.그렇다면 egg-info 디렉토리를 어떻게 생성합니까?아니면 내가 그럴 필요가 있는 걸까?

이것이 나의 virtualenv 사용법을 어떻게 바꾸나요?virtualenv는 easy_install을 사용하여 환경을 관리하지 않나요?

이로 인해 "개발" 명령이 제공되는 setuptools의 사용이 어떻게 변경됩니까?그거 쓰면 안되는 걸까요?대안은 무엇입니까?

저는 기본적으로 개발 작업 흐름이 어떤 모습일지 파악하려고 노력하고 있습니다.

누군가가 제안하기 전에 저는 OS 종속 솔루션을 찾고 있지 않습니다.나는 주로 데비안 리눅스에 관심이 있지만 Ian Bicking이 설명하는 이유 때문에 deb 패키지는 옵션이 아닙니다. 여기.

도움이 되었습니까?

해결책

pip는 Setuptools를 사용하며 패키지를 변경할 필요가 없습니다.실제로 다음을 사용하여 Setuptools로 패키지를 설치합니다.

python -c 'import setuptools; __file__="setup.py"; execfile(__file__)' \
    install \
    --single-version-externally-managed

해당 옵션을 사용하기 때문에(--single-version-externally-managed) 계란을 zip 파일로 설치하지 않으며, 동시에 설치된 여러 버전의 소프트웨어를 지원하지 않으며, 패키지는 플랫하게 설치됩니다(예: python setup.py install distutils만 사용하는 경우 작동합니다).Egg 메타데이터가 여전히 설치되어 있습니다.pip도 easy_install과 마찬가지로 패키지의 모든 요구 사항을 다운로드하고 설치합니다.

게다가 요구 사항 파일을 사용하여 배치로 설치해야 하는 다른 패키지를 추가하고 버전 요구 사항을 더 정확하게 만들 수도 있습니다(정확한 요구 사항을 setup.py 파일).하지만 요구사항 파일을 만들지 않으면 easy_install처럼 사용하게 됩니다.

당신을 위해 install_requires 좋은 것으로 알려진 매우 정확한 요구 사항을 만들려고 시도하지 않는 한 어떤 변경도 권장하지 않습니다.내 생각엔 당신이 유용하게 사용할 수 있는 정확한 범위에는 한계가 있는 것 같아요. setup.py 새 라이브러리의 향후 호환성이 어떻게 될지 실제로 알 수 없기 때문에 버전에 대한 파일을 예측하려고 시도하지 않는 것이 좋습니다.요구 사항 파일은 보수적인 버전 요구 사항을 배치하는 대체 장소입니다.

당신은 여전히 ​​사용할 수 있습니다 python setup.py develop, 그리고 실제로 그렇게 한다면 pip install -e svn+http://mysite/svn/Project/trunk#egg=Project 그것은 그것을 확인할 것입니다. src/project) 그리고 실행 setup.py develop 그 위에.따라서 그 작업 흐름은 실제로 다르지 않습니다.

pip를 장황하게 실행하면(예: pip install -vv) 실행되는 많은 명령을 볼 수 있으며 아마도 대부분의 명령을 인식할 것입니다.

다른 팁

나는 2014 년 4 월에 이것을 쓰고 있습니다. Python 포장, 배포 또는 설치에 관한 모든 것에 대한 날짜를 의식하십시오. 지난 3 년 동안 사실이 약간 줄어들고, 구현의 개선, PEP 표준화 및 통일이 발생한 것처럼 보입니다.

예를 들어, 파이썬 포장 당국 "Python 포장에서 관련 프로젝트를 많이 유지하는 작업 그룹입니다."

그만큼 python.org 파이썬 포장 사용자 안내서 가지다 도구 권장 사항 그리고 파이썬 포장의 미래 섹션.

distribute 지점이었다 setuptools 그것은 2013 년 6 월에 개장되었습니다. 가이드는 "사용 setuptools 프로젝트를 정의하고 소스 배포판을 만듭니다. "

PEP 453 및 Python 3.4 기준으로 가이드는 "사용합니다. pip PYPI에서 Python 패키지를 설치하려면 "및 pip Python 3.4에 포함되어 있으며 virtualenvs에 설치 pyvenv, 또한 포함되어 있습니다. 당신은 찾을 수 있습니다 PEP 453 "근거"섹션 흥미로운.

가이드에 언급 된 새롭고 새로운 도구가 있습니다. wheel 그리고 buildout.

다음과 같은 기술/반 정치적 역사를 모두 읽어서 다행입니다.

2009 년 Martijn Faassen : 파이썬 포장의 역사.

2013 년 6 월 Armin Ronacher (제목은 심각하지 않음) : 파이썬 포장 : 증오, 증오, 모든 곳에서 미워합니다.

우선, Pip은 정말 새롭습니다. 현실 세계에서 새롭고 불완전하고 크게 테스트되지 않았습니다.

그것은 큰 약속을 보여 주지만 Easy_Install/SetUptools가 할 수있는 모든 것을 할 수있는 시간까지는 회사에서는 아니었을 것입니다.

Easy_Install/SetUptools는 크고 복잡하며 많은 사람들을 화나게합니다. 불행히도 그 복잡성에 대한 정말 좋은 이유가 있습니다. My Own은 대형 (> 300) 데스크탑 사용자 풀과 자주 업데이트되는 응용 프로그램이있는 유사한 크기의 그리드를 지원합니다. 모든 사용자가 소스에서 설치할 수있게함으로써이를 수행 할 수 있다는 개념은 어리석은 일입니다. 계란은 내 프로젝트를 배포하는 신뢰할 수있는 방법으로 입증되었습니다.

내 조언 : SetUptools 사용을 배우십시오. 정말 멋진 일입니다. 그것을 싫어하는 대부분의 사람들은 그것을 이해하지 못하거나 단순히 완전한 기능 분배 시스템으로 사용되는 사용 사례가 없습니다.

:-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top