프로그래밍/파이썬

requirements.txt에 버전이 안써있고 경로가 써있을때 해결 방법(conda 사용자)

-- 관리자 -- 2023. 5. 20.
반응형

왜 자꾸 requirements.txt에 로컬 경로도 아닌 이상한 경로가 나올까?

본인이 conda를 사용하고, 가상환경에서 주로 작업을 한다면 requirements.txt를 일반적인 pip명령어로 실행했을때

검색해서 보던거와 많이 다른 내용물을 확인 할 수 있을 것임

 

pip freeze > requirements.txt

위 명령어를 입력하면, 패키지명과 버전이 나와야하지만, conda를 통한 가상환경 사용자는 아래와 같이 보일 것임

 

나도 새로 만든 서버에서 git clone을 하고 requirements.txt를 설치하려고 보니 자꾸 에러가 나길래 파일을 살펴보니

이게 뭔일이래

알수없는 요상한 경로들이 꽉꽉 들어차 있는 것을 확인할 수 있었음

검색을 해봤지만 stackoverflow에도 관련 없는 답글만이 넘쳐났고, 이 때 딱 한가지 머릿속을 스치는 의심이 있었는데,

conda를 사용해서 패키지를 설치했기 때문이 아닌가하는 생각이 들었음

그래사 바로 검색을 해보니 conda용 requirements.txt 생성 커맨드가 있었던 것임!

 

아래 커맨드를 입력해주면

conda list -e > requirements.txt

 

다시 모든 버전이 명기되있는, requirements.txt가 만들어짐

 

 

만약 본인이 리눅스 환경에서 콘다를 사용중이라면 아래 커맨드만 입력하면 끝임

내 가상환경 경로에서 입력
conda install --file requirements.txt


만약 가상환경이랑 한번에 같이 만들고 싶으면 아래 커맨드를 입력
conda create --name <environment_name> --file requirements.txt

 

 

아직 뭔가 이상하다

그러나 이 명령어로 추출한 requirements.txt에는 요상한 경로가 안써있지만, 콘다로부터 이상한 접미사가 붙어버림

우리가 원하는 것은 pip install 하기 위한 패키지명 = 버전 형태이니 우분투에서 아래와 같은 정규식을 통해

필요한 부분만 가져와서 다른 파일로 저장할 것임

 

requirements.txt가 있는 경로로 들어가서 아래 정규식을 통해 pip-requirements.txt만 뽑아냄

sed -En 's/^([a-zA-Z0-9\-]+)=([0-9\.]+)=.*/\1==\2/p' requirements.txt > pip-requirements.txt

그리고 pip 명령어로 설치해보면 대체로 잘 되는 것을 볼 수 있는데, 간혹 안되는 패키지는 삭제 후 따로 수동으로 설치하며 면 됨

 

나처럼 requirements에 버전이 제대로 안나오는 현상을 겪은 사람에게 도움이 되길

 

 

 

반대로 requirements를 콘다 가상환경에서 인스톨할때는 conda install pip로 pip를 먼저 설치해준 다음에

pip install -r requirements.txt

해주면 됨

반응형

댓글