새로운 파이프 역추적 런타임 문제 해결
버전 20.3과 함께 릴리스된 새 pip 종속성 확인 프로그램은 패키지를 설치하는 데 부적절하게 오랜 시간이 걸립니다.어제 CI 파이프라인에서 다음과 같은 pip 설치 메시지가 표시된 후 10분 정도 걸리던 도커 빌드가 시간 초과되었습니다(종속 관계에 따라 설치되는 거의 모든 라이브러리에 대해 유사한 로그 출력이 있음).
INFO: pip is looking at multiple versions of setuptools to determine which version is compatible with other requirements. This could take a while.
Downloading setuptools-50.0.0-py3-none-any.whl (783 kB)
Downloading setuptools-49.6.0-py3-none-any.whl (803 kB)
Downloading setuptools-49.5.0-py3-none-any.whl (803 kB)
Downloading setuptools-49.4.0-py3-none-any.whl (803 kB)
Downloading setuptools-49.3.2-py3-none-any.whl (790 kB)
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking
Downloading setuptools-49.3.1-py3-none-any.whl (790 kB)
Downloading setuptools-49.3.0-py3-none-any.whl (790 kB)
Downloading setuptools-49.2.1-py3-none-any.whl (789 kB)
Downloading setuptools-49.2.0-py3-none-any.whl (789 kB)
Downloading setuptools-49.1.3-py3-none-any.whl (789 kB)
Downloading setuptools-49.1.2-py3-none-any.whl (789 kB)
Downloading setuptools-49.1.1-py3-none-any.whl (789 kB)
Downloading setuptools-49.1.0-py3-none-any.whl (789 kB)
Downloading setuptools-49.0.1-py3-none-any.whl (789 kB)
Downloading setuptools-49.0.0-py3-none-any.whl (789 kB)
Downloading setuptools-48.0.0-py3-none-any.whl (786 kB)
Downloading setuptools-47.3.2-py3-none-any.whl (582 kB)
Downloading setuptools-47.3.1-py3-none-any.whl (582 kB)
Downloading setuptools-47.3.0-py3-none-any.whl (583 kB)
Downloading setuptools-47.2.0-py3-none-any.whl (583 kB)
Downloading setuptools-47.1.1-py3-none-any.whl (583 kB)
Downloading setuptools-47.1.0-py3-none-any.whl (583 kB)
Downloading setuptools-47.0.0-py3-none-any.whl (583 kB)
Downloading setuptools-46.4.0-py3-none-any.whl (583 kB)
Downloading setuptools-46.3.1-py3-none-any.whl (582 kB)
Downloading setuptools-46.3.0-py3-none-any.whl (582 kB)
Downloading setuptools-46.2.0-py3-none-any.whl (582 kB)
Downloading setuptools-46.1.3-py3-none-any.whl (582 kB)
Downloading setuptools-46.1.2-py3-none-any.whl (582 kB)
Downloading setuptools-46.1.1-py3-none-any.whl (582 kB)
Downloading setuptools-46.1.0-py3-none-any.whl (582 kB)
Downloading setuptools-46.0.0-py3-none-any.whl (582 kB)
Downloading setuptools-45.3.0-py3-none-any.whl (585 kB)
Downloading setuptools-45.2.0-py3-none-any.whl (584 kB)
Downloading setuptools-45.1.0-py3-none-any.whl (583 kB)
Downloading setuptools-45.0.0-py2.py3-none-any.whl (583 kB)
Downloading setuptools-44.1.1-py2.py3-none-any.whl (583 kB)
Downloading setuptools-44.1.0-py2.py3-none-any.whl (583 kB)
Downloading setuptools-44.0.0-py2.py3-none-any.whl (583 kB)
Downloading setuptools-43.0.0-py2.py3-none-any.whl (583 kB)
Downloading setuptools-42.0.2-py2.py3-none-any.whl (583 kB)
Downloading setuptools-42.0.1-py2.py3-none-any.whl (582 kB)
Downloading setuptools-42.0.0-py2.py3-none-any.whl (582 kB)
Downloading setuptools-41.6.0-py2.py3-none-any.whl (582 kB)
Downloading setuptools-41.5.1-py2.py3-none-any.whl (581 kB)
Downloading setuptools-41.5.0-py2.py3-none-any.whl (581 kB)
Downloading setuptools-41.4.0-py2.py3-none-any.whl (580 kB)
Downloading setuptools-41.3.0-py2.py3-none-any.whl (580 kB)
Downloading setuptools-41.2.0-py2.py3-none-any.whl (576 kB)
Downloading setuptools-41.1.0-py2.py3-none-any.whl (576 kB)
Downloading setuptools-41.0.1-py2.py3-none-any.whl (575 kB)
Downloading setuptools-41.0.0-py2.py3-none-any.whl (575 kB)
Downloading setuptools-40.9.0-py2.py3-none-any.whl (575 kB)
Downloading setuptools-40.8.0-py2.py3-none-any.whl (575 kB)
Downloading setuptools-40.7.3-py2.py3-none-any.whl (574 kB)
Downloading setuptools-40.7.2-py2.py3-none-any.whl (574 kB)
Downloading setuptools-40.7.1-py2.py3-none-any.whl (574 kB)
Downloading setuptools-40.7.0-py2.py3-none-any.whl (573 kB)
Downloading setuptools-40.6.3-py2.py3-none-any.whl (573 kB)
Downloading setuptools-40.6.2-py2.py3-none-any.whl (573 kB)
Downloading setuptools-40.6.1-py2.py3-none-any.whl (573 kB)
Downloading setuptools-40.6.0-py2.py3-none-any.whl (573 kB)
Downloading setuptools-40.5.0-py2.py3-none-any.whl (569 kB)
Downloading setuptools-40.4.3-py2.py3-none-any.whl (569 kB)
Downloading setuptools-40.4.2-py2.py3-none-any.whl (569 kB)
Downloading setuptools-40.4.1-py2.py3-none-any.whl (569 kB)
Downloading setuptools-40.4.0-py2.py3-none-any.whl (568 kB)
Downloading setuptools-40.3.0-py2.py3-none-any.whl (568 kB)
저는 특히 그 이후로 우리가 새로운 파이프 리졸버를 올바르게 사용하고 있는지 꽤 혼란스럽습니다.
- Substantial improvements in new resolver for performance, output and error messages, avoiding infinite loops, and support for constraints files.
표시된 동작은 릴리스 정보에 역추적으로 설명되어 있습니다.나는 그것이 왜 거기에 있는지 이해합니다.요구 사항처럼 보이는 제약 조건 파일을 사용할 수 있다고 지정합니다.txt)를 사용하여 런타임을 줄이기 위해 종속성의 버전을 수정합니다.pip install -c constraints.txt setup.py
.
이 제약 조건 파일을 생성하는 가장 좋은 방법은 무엇입니까?할 수 수 있 방 법 좋 은 가 장 는 생 각 할 ▁currentlypip install setup.py
에서 새 을 사용한 로로새 가환사수있용다할습니를 사용합니다.pip freeze > constraints.txt
그러나 로컬 설치에는 여전히 많은 시간이 소요됩니다(현재 약 10분 동안 중단됨).메모에는 다음과 같은 내용이 있습니다.This means the “work” is done once during development process, and so will save users this work during deployment.
이전 종속성 해결 프로그램을 사용하여 이 패키지를 현지에서 1분 이내에 설치할 수 있었습니다.
여기서 권장되는 과정은 무엇입니까?
편집: 일부 종속성이 내부 gitlab 서버를 직접 가리키고 있다는 것을 방금 알게 되었습니다.대신 내부 패키지 레지스트리에서 직접 설치하면 몇 분 안에 다시 작동합니다.
최신 업데이트(2022-02)
에 중대한 업데이트가 있는 것 같습니다.pip
에 (버전 된지며버안됨칠출전시버됨(안)▁just전version▁old▁(▁few)22.0
릴리스 노트 + github 관련 문제).
더 자세히 테스트하지는 않았지만 복잡한 경우에 설치 순서 계산을 최적화하여 이전에 발생한 많은 문제를 해결한 것 같습니다.하지만 저는 그것을 확인하는 데 시간이 더 필요할 것입니다.
어쨌든, 이 답변의 나머지 부분은 여전히 유효하며 특정 프로젝트에 적합한 스마트 요구 사항을 고정하는 것이 모범 사례입니다.
저는 비슷한 문제에 직면했기 때문에 이것이 꽤 짜증나는 일이라는 것에 동의합니다.역추적은 유용한 기능일 수도 있지만, 성공 여부가 불확실할 때까지 몇 시간씩 기다릴 필요는 없습니다.
다음과 같은 도움이 될 수 있는 몇 가지 옵션을 찾았습니다.
- 레졸바를합니다.
--use-deprecated=legacy-resolver
) @Daniel Davee의 답변에서 제안했지만, 이것은 적절한 해결책이라기보다는 임시 해결책에 가깝습니다. - 건기뛰로 종속성
--no-deps
선택. 이 있더라도 할 수 .일반적으로 권장하지는 않지만 일부 충돌이 있더라도 패키지 버전의 작업 세트를 사용할 수 있습니다. - 버전 수를 줄이면 pip이 역추적을 시도하고 패키지 종속성을 더욱 엄격하게 지정합니다.이것은 예를 들어 넣는 대신에 의미합니다.
numpy
내 요구대로txt, 시도해 볼 수 있습니다.numpy >= 1.18.0
아니면 훨씬 더 엄격하게.numpy == 1.18.0
엄격함이 많은 도움이 될 수도 있습니다.
다음 소스를 확인합니다.
항상 도움이 될 만한 적절한 답변은 아직 없지만 요구 사항에 대한 최선의 실천 방법을 가지고 있습니다.txt는 패키지 버전을 "핀"하는 것 같습니다.contraines.txt에서도 이를 관리할 수 있는 pip-tools를 찾았습니다(그러나 저는 실험 단계에 있어서 더 이상 말씀드릴 수 없습니다).
업데이트(2021-04)
질문의 작성자는 문제(커스텀 gitlab 서버의 문제)를 해결할 수 있었던 것 같습니다만, 다른 사용자에게 유용할 수 있기 때문에 이 답변을 연장하고 싶습니다.
읽고 시도한 결과 모든 패키지 버전을 특정 패키지에 고정할 수 있었습니다.이것은 정말 올바른 방법이어야 합니다.모든 할 수 수 새 수 일이 합니다).dask
작년에).
도움이 될 수 있는 몇 가지 툴이 있습니다. 다음 중 하나를 권장합니다.
으로 가장 쉬운 것pipreqs
- pipreqs는 pip 요구사항을 생성하는 라이브러리입니다.프로젝트 가져오기 기준 txt 파일
- 로 시작할 수 있습니다.
pip install pipreqs
그리고 막 달리고 있습니다.pipreqs
프로젝트 루트(또는 최종적으로--force
요구 사항이 이미 있는 경우 플래그) - 그은쉽만것다니입들게것다를 만들 것입니다.
requirements.txt
프로젝트의 가져오기 및 환경에서 가져온 버전을 기준으로 고정된 버전을 사용합니다. - 그러면 언제든지 이를 기반으로 새로운 환경을 만들 수 있습니다.
requirements.txt
이것은 정말 간단한 도구입니다(요구사항.txt를 작성할 필요도 없습니다).복잡한 것을 만들 수 없습니다(대규모 프로젝트에는 적합하지 않을 수 있음). 지난 주에 한 가지 이상한 동작을 발견했습니다(이것 참조). 하지만 일반적으로 이 도구는 완벽하게 작동하기 때문에 만족합니다.
용사를 합니다.pip-tools
Pip-tools, Pipenv 또는 Poetry와 같이 일반적으로 사용되는 몇 가지 다른 도구가 있습니다.2018년의 Pipenv, Pip-tools 또는 Python Application Dependency Management를 사용한 Faster Docker 빌드에서 더 많은 내용을 읽을 수 있습니다(이전 버전이지만 여전히 유효한 것 같습니다).그리고 제가 보기에 여전히 가장 좋은 방법은 (프로젝트/사용 사례에 따라 다르지만)pip-tools
.
다음 작업을 수행할 수 있습니다(이것은 한 가지 옵션입니다. 자세한 내용은 문서를 참조하십시오).
- 를 만들다
requirements.in
)requirements.txt
패키지 종속성을 고정할지 여부는 사용자에게 달려 있습니다.) - 그러면 당신은 그것을 사용할 수 있습니다.
pip install pip-tools
중인 닝러pip-compile requirements.in
- 이것은 새로운 것을 생성할 것입니다.
requirements.txt
모든 버전이 고정된 파일, 명확함, 출처가 무엇인지 - (선택 사항) 를 사용하여 실행할 수 있습니다.
--generate-hashes
- 그러면 할 수 있습니다 (와 마찬가지로).
pipreqs
든지 이를 으로 새로운 . ) 언제든지이새로환운만듭다니경을기로반를으▁)다.requirements.txt
pip-tools
당신에게 제안합니다--upgrade
입니다.- 계층화된 요구사항 지원(예: 개발 및 Prod 버전 제공)
- 사전 커밋과 통합됩니다.
- 제공
pip-sync
요구 사항에 따라 환경을 업데이트하는 도구입니다.txt
더 이상 할 수 있는 것은 거의 없으며 저는 이 제품과 통합하는 것을 정말 좋아합니다.pre-commit
를 통해할 수 (단, 이통단이동수있사다니습용할을요항구사일한를전해과단▁with(▁this,▁the▁asments다니있습just▁allows▁(수▁you▁to▁require▁use,.in
suffix)및requirements.txt
된 것과 입니다.)requirements.txt
수동으로 무언가를 실행할 때 쉽게 발생할 수 있습니다.
그래서 그들은 해결기를 바꾸고 있습니다, 이것은 버그인 것 같습니다.효과가 있었던 것은 오래된 해결책을 사용하는 것이었고, 깃발을 사용했습니다.
--use-deprecated=legacy-resolver
이것은 분명히 pip 21.0까지 작동할 것입니다.
출처 https://github.com/pypa/pip/issues/9215
비슷한 문제가 있었고 저에게 효과가 있는 솔루션을 보고하고 싶었습니다.다음을 사용하여 pip 버전을 업데이트해야 했습니다.
pip install --upgrade pip
사실 저는 도커 이미지를 만들고 있어서 라인을 추가했습니다.
RUN pip install --upgrade pip
요구 사항을 설치하기 직전.할 때 은 이답을작때설성치된버전다같다습니음입니다.22.0.3
그렇게 해서 문제가 해결되었습니다.
저 같은 경우에는 끝나지 않았어요.이유는 업데이트였습니다.djangorestframework
와호지않버로와 호환되지 django
이 설하고싶다니습을 .djangorestframework-3.12.4
그것은 에 달려있고 또한 가지고 있었습니다.django==2.0.2
requirements.txt
.
모든 종속성을 고정했음에도 불구하고 저는 동일한 문제를 안고 있으며 제공된 해결책이 저에게 적용되지 않았습니다.
그래서 저는 콘솔 출력에서 PIP가 역추적되도록 만든 첫 번째 패키지(첫 번째 경고 이전의 패키지: "INFO: pip는 다른 요구 사항과 호환되는 버전을 확인하기 위해 __의 여러 버전을 보고 있습니다. 이 작업은 시간이 걸릴 수 있습니다."). 그리고 요구 사항에서 제거됩니다.txt. 이것으로 문제가 해결되었습니다.
나는 나의 모든 의존성을 고정시켰습니다.지금 그것을 하기 위해서는 나중에 혹은 지금 그것들을 고정시켜야 할 것입니다.하고 있습니다pip 20.3.1
종속성을 고정하지 않으면 새 종속성 해결자 알고리즘은 최신 버전 태그에서 초기 버전에 이르기까지 각 종속성에 대해 사용 가능한 모든 버전을 확인합니다.
당신의 파이프를 20.x 버전으로 다운그레이드하세요. 이것은 당신이 21.x 버전에서 직면하게 될 문제입니다.
저의 경우 가상 환경을 사용했으며 3.8.3 대신 python 3.10.x를 사용하는 데 도움이 되었습니다.
python3.10 -m venv venv
source venv/bin/activate
pip install .
Pip은 이미 22.3.1로 업그레이드되었습니다.
내 모든 패키지가 필요한데도 말입니다.txt는 버전이 수정되었지만 문제는 여전히 존재합니다.대신 최신 버전으로 업데이트합니다.물론 이것은 고장이 나지 않도록 보장하기 위해 추가적인 노력을 필요로 하지만, 저에게는 그 문제가 해결된 것처럼 보였습니다.
언급URL : https://stackoverflow.com/questions/65122957/resolving-new-pip-backtracking-runtime-issue
'code' 카테고리의 다른 글
두 행 간의 시간 차이 계산 (0) | 2023.06.27 |
---|---|
mongo 집계 쿼리에서 $project를 사용하여 필드를 최상위 문서로 반환할 수 있습니까? (0) | 2023.06.27 |
URL로 인코딩된 양식 데이터가 잘못되었습니다. (0) | 2023.06.27 |
범례 gg 그림 2.2 제거 (0) | 2023.06.27 |
Wordpress Rest API 역방향 프록시 (0) | 2023.06.27 |