Jost Do It.

그냥 IT해.

Programming/Python

[Python] pip freeze 시, 버전명이 '@ file:///' 로 뜨는 문제

그냥하Jo. 2023. 6. 16. 08:39
반응형

문제 상황

현재 환경에서 사용하고 있는 라이브러리 패키지 정보들을 가져올 때 보통 아래처럼 `pip freeze` 명령어를 사용해 `requirements.txt` 파일로 저장한다.

 

pip freeze > requirements.txt

 

그럼 아래와 같이 해당 환경에 설치된 패키지들의 정보가 `requirements.txt` 파일에 저장된다.

 

<...>
clickhouse-driver==0.2.5
clickhouse-sqlalchemy==0.2.3
colorama @ file:///croot/colorama_1672386526460/work
colorlog==4.8.0
colour==0.1.5
commonmark @ file:///Users/ktietz/demo/mc3/conda-bld/commonmark_1630649545323/work
ConfigUpdater @ file:///croot/configupdater_1668698026863/work
confluent-kafka==2.1.1
connexion @ file:///opt/conda/conda-bld/connexion_1659800744294/work
cron-descriptor @ file:///opt/conda/conda-bld/cron-descriptor_1659858414281/work
croniter @ file:///croot/croniter_1666888073231/work
cryptography @ file:///croot/cryptography_1673298753778/work
debugpy==1.6.3
decorator==5.1.1
defusedxml==0.7.1
<...>

 

여기서 문제가 되는 부분은 해당 패키지 버전명이 `@ file://~~ `로 떠서 `requirements.txt` 을 이용해 해당 환경을 재구현할 수 없는 점이다.

 

 

문제 원인

`pip` 패키지 19.1버전부터 버전명을 @ ~~로 명명하는 방법이 추가되었다고 한다.

이는 패키지가 아래처럼 특정 깃 레포 등에서 추가될 때 해당 정보를 저장하는데 유용하다.

 

<package_name> @ git+https://githost/<repo>.git@<commit_id>

 

하지만 버전명이 file://<URL> 과 같이 로컬폴더로 지정된 경우는 해당 패키지 정보를  로컬환경이 아닌 이상 재구축하기 힘들다.

 

 

 

해결 방법

아래와 같이 format 옵션을 줘 해결할 수 있다.

pip list --format=freeze > requirements.txt

 

 

위 명령어로 `requirements.txt`를 만들면 아래와 같이 버전명이 정상적으로 출력된다.

<...>
clickhouse-driver==0.2.5
clickhouse-sqlalchemy==0.2.3
colorama==0.4.6
colorlog==4.8.0
colour==0.1.5
commonmark==0.9.1
ConfigUpdater==3.1.1
confluent-kafka==2.1.1
connexion==2.14.0
cron-descriptor==1.2.24
croniter==1.3.7
cryptography==38.0.4
debugpy==1.6.3
decorator==5.1.1
defusedxml==0.7.1
<...>

 

 

 

Reference

 

반응형