티스토리 뷰

1. 왜 이런 오류가 나는가?

해당 오류는 환경 설치 파일(yml/yaml/requirements.txt) 내부에 설치해야 할 package의 버전을 명시하지 않고 배포자의 컴퓨터에 존재하는 local path로 지정하여 배포한 환경설치파일을 이용한 경우에 나타난다.

다시말해, 설치를 원하는 바로 당신의 컴퓨터에는 당연히 배포자가 지정한 경로에 설치파일이 존재할리 없다. 따라서 컴퓨터는 '그런 경로에 패키지 설치파일이 없는데?' 또는 '그런 경로가 없는데?' 라는 에러를 뱉어내는 것이다.

 

2. 예를들어보면

예를들어 철수의 컴퓨터에 C드라이브/배포자컴퓨터/텐동/설치할패키지 경로가 있었고, 이것을 export해서 환경설치파일을 만들었다고 하자. 이것을 다운로드 받은 영희 컴퓨터에서 아무리 C드라이브/배포자컴퓨터/텐동/패키지 경로를 이용해 설치하려 해도 영희 컴퓨터에는 당연히 C드라이브/배포자컴퓨터 <<< 라는 경로가 없기 때문에 영희 컴퓨터 입장에서는  무슨 뚱딴지같은 파일을 설치하라는 것인지 알 수가 없는 것이다.

 

3. 해결방법은?

이렇게 export된 환경설치파일을 이용해 환경을 설치하려는 경우에 한해서는, 배포해준 파일이 경로로 설정된 경우라면 해결방법은 따로 없다. 어찌어찌 몇몇 local path로 지정된 패키지들만 따로 확인해서 conda install 또는 pip install을 한다고 하더라도 이미 설치된 다른 패키지들과 version conflict 에러가 나며 설치가 이뤄지지 않거나, 원치 않는 패키지들의 업데이트가 동시다발적으로 진행되어 영겁의 시간동안 install해야하는 경우에 빠지는 경우가 많다. (특히 conda를 사용할 때)

결국 배포자가 package 버전을 명시한 requirements.txt나 yml 파일을 다시 배포해 주거나, 본인이 알아서 그런 패키지들의 버전을 찾아서 yml 파일 내의 local path로 지정된 패키지들을 버전에 맞춰 수정한 뒤에 설치해보는 수 밖에 없는데, 이러면 당연히 패키지 배포자와 다른 버전의 패키지가 설치될 가능성이 높고, conda의 경우 패키지 version간의 conflicts를 확인하는 과정이 있어 비정상적으로 시간이 오래 걸리는 경우도 많다. (solve environment 단계에서 3시간~4시간 기다려봐야 결국에는 conflicts error 메세지 뜨면서 설치가 안된다는 에러를 뱉는데 멘탈이 심하게 흔들린다.)

이런 경우 가장 확실한 방법은 requirements.txt 배포자에게 메일 등으로 컨택하여 버전이 명시된 yml파일로 다시 보내달라 하는것이 좋다. 그러나 보통은 이런 시시콜콜한 일에는 답장이 오지 않는 경우가 많다.

 

약간의 삽질과 경험을 통한 팁이 있기는 하다.

yml 파일을 살펴보자, package_name == /tmp/build/80754af9/cffi_1625814693446/work 이런식으로 버전이 명시되지 않고 path가 지정되어있는부분은 그냥 == 이후 뒷부분을 모두 제거하여 package_name만 남겨놓고 yml파일을 설치해보자, 재수가 좋으면 해결이 되는 경우도 있다. (물론 안되는 경우가 훨씬 많다.)

댓글