본문 바로가기

app/python

pip multiple versions of dependency resolver problem

INFO: pip is looking at multiple versions of <package name> to determine which version is compatible with other requirements. This could take a while.
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.

 

 

pip의 dependency resolver 문제로 pip의 최신 버전에서 나타나는 문제이다.

 

설치하려는 패키지와 연관된 모든 패키지의 하위 패키지의 종속성을 모두 체크해서 나오는 상태로, 몇 개의 패키지만 설치하려 해도 6시간은 가뿐하게 넘어간다. (설치되면 다행일 정도..)

 

해결 방법

1.  pip의 버전을 최신으로 업데이트 하지 않는다. 혹은 버전을 고정시킨다.

2021 6월에는 해당 문제는 pip 21.0 버전부터 발생하므로 그 이전 stable 버전인 pip 20.3으로 고정한다.

- 최신 stable 버전은 달라질수 있습니다.

1
pip install -U pip==20.3
cs

혹은 기존 사용하는 pip를 업데이트 하지 않은 상태에서 install을 진행한다.

 

 

2. 패키지 인스톨시 --use-deprecated=legacy-resolver 옵션을 추가한다.

최신의 dependency resolver를 사용하지 않는다는 옵션이다. 해당 옵션은 pip==20.3에서만 동작한다.

1
pip install --use-deprecated=legacy-resolver -r requirements.txt
cs

상세한 사항은 pip 문서를 확인을 하시면 됩니다.

https://pip.pypa.io/en/latest/user_guide/#deprecation-timeline-for-2020-resolver-changes

 

 

 

해결~~ 끝!

 

 

 

 

번외

 

- 원인을 몰라서 며칠을 고생했는지 모르겠다..

- 하필 저 문제를 겪을 때 pypi 서버가 공격을 당해서 다운된 날이라 서버의 문제로 착각해서 며칠을 날렸다.

   pip의 서버 상태는 여기에서 확인 가능하다.

- pip의 인스톨 서버도 변경이 가능한다. 이번에 해당 문제를 겪으면서 서버 문제로 생각해서 daumkakao 서버로 변경했다. (리눅스 배포도 그렇고, 이런 패키지 서버는 항상 daumkakao에서 서비스를 잘해준다...)

 

Dockerfile에서는 아래와 같이 작성한다.

1
2
3
RUN mkdir ~/.pip \
    && touch ~/.pip/pip.conf \
    && echo "[global]\nindex-url=http://ftp.daumkakao.com/pypi/simple\ntrusted-host=ftp.daumkakao.com" > ~/.pip/pip.conf \
cs

 

 

 

 

 

 

참고

https://pip.pypa.io/en/latest/user_guide/#deprecation-timeline-for-2020-resolver-changes

https://stackoverflow.com/questions/66008760/pips-dependency-resolver-takes-way-too-long-to-solve-the-conflict#

'app > python' 카테고리의 다른 글

parquet  (0) 2021.07.05
pickle  (0) 2021.06.28
파이썬 부동소수점 사용시 주의할점  (1) 2021.06.09
array의 연산을 빠르게 하는 방법  (0) 2021.04.09
Peephole optimization  (0) 2020.04.09