반응형
문제 상황
현재 환경에서 사용하고 있는 라이브러리 패키지 정보들을 가져올 때 보통 아래처럼 `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
- Why does the pip requirements file contain "@file" instead of version number?
- Pip freeze generating '@ file:///' on conda environment
반응형
'Programming > Python' 카테고리의 다른 글
[Python] upsert문 간접 구현하기 (0) | 2024.02.05 |
---|---|
[Python] json 출력 포맷 설정하기 (0) | 2023.12.19 |
[Python] 하버사인 (haversine)으로 위경도가 주어진 두 지점 거리 구하기 (0) | 2022.10.12 |
[Python] Ray 라이브러리를 이용한 코드 병렬 처리와 이에 대한 고찰 (0) | 2022.09.30 |
[Python] functools의 partial 함수 알아보기 (2) | 2022.09.25 |