conda, pip - export pkgs

1 분 소요

conda - conda export pkgs

  • conda 명령어를 사용하여, 현재 환경에서 설치된 패키지들을 확인하려면 다음 명령어를 사용하면 됩니다.
  • pip listconda list는 기본적으로 같다고 생각하시면 됩니다.
$ conda list
$ pip list
  • pip freeze를 사용하면, 다음과 같이 깔끔한 형태로 정리해 줍니다.
$ pip freeze
alabaster==0.7.12
anaconda-client==1.7.2
anaconda-navigator==1.9.12
anaconda-project==0.8.3
applaunchservices==0.2.1
...
  • 따라서, 아래 command를 사용해서 requirement.txt에 해당 패키지들을 다음처럼 깔끔하게 정리할 수 있죠.
    • pip freeze: 현재 python 환경에 설치된 pkg들을 pkg_name==pkg_version의 형태로 출력해주는 명령어
    • > requirement.txt: requirment.txt 파일을 write mode로 읽어서, 이전에 수행된 명령어의 결과를 집어넣고 출력해줍니다.
  • vi requirement.txt를 사용해서 값이 잘 저장되었는지를 확인할 수 있죠.
$ pip freeze > requirement.txt
$ vi requirement.txt
  • 만약 다른 환경에서, requirment.txt에 저장된 패키지들을 모두 설치해주고 싶다면, 다음 명령어를 사용하면 된다.
pip install -r requirement.txt
  • conda에서도 같은 작업을 수행할 수 있는데요. 명령어는 다음과 같습니다.
$ conda list --export > requirement_by_conda.txt                                                                                           
$ vi requirement_by_conda.txt   
  • 이렇게 생성된 requirement_by_conda.txt를 활용해서 새로운 conda 환경을 구축해 주고 싶을 때는, 아래 명령어를 사용하면 됩니다.
conda create --name new_conda_env --file requirement_by_conda.txt
  • 만약, 아래 명령어를 사용했을 때, 진행되다가, 다음과 같은 메세지와 함께 진행이 되지 않는다면, 해당 conda 환경에 설치되어 있는 몇몇 package들이 conda install을 통해 설치할 수 없는 패키지들이라는 것을 말합니다.
PackagesNotFoundError: The following packages are not available from current channels:

  - requests-oauthlib==1.3.0=pypi_0
...
  • 따라서, 아예 새로운 conda 환경을 구축해 주고 다시 진행해 보기로 합니다.
    • 새로운 pure한 conda 환경을 만들어주고,
    • 해당 env를 활성화 해주고
    • 해당 env에서 새로운 package를 설치해주고
    • 현재 env의 pkg들을 txt 파일로 만들어주고,
    • 만들어준 txt 파일로부터 새로운 conda 환경을 구축해주고
    • 잘 생성되었는지 확인해보고, 지워줍니다.
$ conda create --name new_env
$ conda activate new_env
$ conda install networkx
$ conda list --export > requirement_for_test.txt
$ conda create --name new_conda_env --file requirement_for_test.txt
$ conda env list
$ conda env remove -n new_conda_env
$ conda env list

wrap-up

  • conda, pip를 사용하여 현재 설치되어 있는 패키지들을 가져와서 동일한 환경을 구축할 수 있는 방법을 정리하였습니다.

댓글남기기