2017-02-14 2 views
1

다음은 Python 3 가상 환경에서 발생합니다.`pip3 install numpy`가`install_requires`에서 설정하는 것보다 훨씬 빠릅니까?

방금 ​​numpy이 필요한 작은 패키지를 작성했습니다. 그래서, setup.py에, 나는 install_requires=['numpy']를 썼다. python3 setup.py install을 돌렸고 2 분 정도 걸렸습니다. 로그, 경고 및 정상적으로 설치가 안되는 구성의 전체 화면 덤프를 받았습니다.

그런 다음 새로운 가상 환경을 만들었으며 이번에는 단지 pip3 install numpy (몇 초 만에 완료)을 작성한 다음 python3 setup.py install을 실행했으며 거의 ​​즉시 완료되었습니다.

두 가지의 차이점은 무엇이며, 왜 pip3 install numpy이 그렇게 빨리 빨랐 을까요? 사람들이 setuptools를 사용하기보다는 요구 사항을 pip-install 할 수 있도록 requirements.txt을 포함해야합니까?

Collecting numpy 
    Using cached numpy-1.12.0-cp36-cp36m-manylinux1_x86_64.whl 
Installing collected packages: numpy 
Successfully installed numpy-1.12.0 

가이 너무 빨리 NumPy와 바퀴가 이미 캐시 때문에이었다 가능 : 나는 pip3 install numpy을 쓸 때, 나는 다음과 같은 가지고 있다는


주?

+0

** 캐시 된 ** numpy를 사용 하시겠습니까? – McGrady

+0

@McGrady 예, 저는 실제 설치 자체가 아니라 바퀴가 캐쉬 된 것으로 가정하고 있습니다. setuptools를 사용하여 numpy를 설치하면 다운로드에 불과 몇 초 밖에 걸리지 않습니다. 나머지 시간은 설치에 소요됩니다. – Newb

+0

새 venv에 패키지를 설치하려고하면 처음보다 빨리 패키지가 설치됩니까? – Eric

답변

2

pip installwheel 패키지를 사용합니다.이 패키지는 설치 프로세스의 속도를 높이기 위해 부분적으로 설계되었습니다.

wheel 형식을 도입 PEP 427Rationale 섹션, 상태 :

파이썬은 sdist보다 쉽게 ​​설치되는 패키지 형식이 필요합니다. 파이썬의 sdist 패키지는 distutils와 setuptools에 의해 정의되고 빌드 및 설치를 위해 임의의 코드를 실행하고 코드를 다시 컴파일하여 코드를 새로 작성하여 virtualenv에 설치할 수 있습니다. 이 빌드 - 인스톨 시스템은 느리며, 을 유지하기 힘들고 빌드 시스템과 설치자 모두에서 혁신을 방해합니다.

Wheel은 빌드 시스템과 설치 프로그램간에보다 간단한 인터페이스를 제공하여 이러한 문제를 해결하려고 시도합니다. 휠 바이너리 패키지 형식을 사용하면 설치자가 시스템 빌드에 대해 알 필요가 없으므로 많은 설치에 걸쳐 컴파일 시간을 상주시켜 시간을 절약하고 대상에 빌드 시스템을 설치할 필요가 없습니다. 그것은 Built Distribution format이기 때문에 wheel에서 설치

빠른 :

내장 배포가

만의 올바른 위치로 이동해야 할 파일 및 메타 데이터를 포함하는 배포 형식 대상 시스템은 입니다. Wheel은 그와 같은 형식이지만, distutil의 Source Distribution은 그렇지 않습니다. 즉, 빌드 단계가 필요하기 전에 을 설치해야합니다.이 형식은 파이썬 파일이 프리 컴파일되어야 함을 의미하지는 않습니다 (Wheel은 의도적으로 컴파일 된 파이썬 파일을 포함하지 않습니다). numpy의 소스 배포 이후

은 당신이 베어 setuptools를 통해 그것을 설치할 때 관찰 눈에 띄는 시간을 소요 컴파일, C 코드의 상당한 양이 포함되어 있습니다. pip는 바이너리 코드 (이미 시스템 용으로 컴파일 된)가 있기 때문에 C 코드의 컴파일을 피했습니다.

관련 문제