2019년 7월 12일 금요일

pip와 conda의 행복한 동거는 어렵다

"Conda 환경 안에서 pip로 새로운 파이썬 패키지를 설치하는 것은 좋지 않다."
Unfortunately, issues can arise when conda and pip are used together to create an environment. [Using Pip in a Conda Environment]
LS-BSR에 포함된 파이썬 스크립트를 실행하는 과정에서 pandas와 관련한 에러가 발생하였다. 에러 메시지를 이용하여 구글을 검색해 보면 흔하디흔한 에러 중 하나다. 참고삼하 말하자면 나는 파이썬 초급 교육을 몇 번 받은 일이 있고 패키지 관리와 활용 정도는 하는 편이지만 파이썬 문법 자체는 잘 모른다.

$ python ../../tools/BSR_to_cluster_dendrogram.py -b bsr_matrix_values.txt
Traceback (most recent call last):
  File "../../tools/BSR_to_cluster_dendrogram.py", line 117, in <module>
    main(options.bsr_matrix,options.cluster_method)
  File "../../tools/BSR_to_cluster_dendrogram.py", line 99, in main
    write_tree(cluster_method)
  File "../../tools/BSR_to_cluster_dendrogram.py", line 76, in write_tree
    dmx = pd.read_csv("distance_matrix", index_col=0, sep="\t")
AttributeError: module 'pandas' has no attribute 'read_csv'

분명히 설치를 했는데 왜 그런 것일까?  해결책을 찾아보다가 conda 내부에서 pip를 이용하여 파이썬 패키지를 관리하는 것은 매우 바람직하지 않다는 글을 발견하였다. Conda가 애써 설치한 파일들을 pip가 건드리게 되지만, conda는 이를 알지 못하기 때문이다. 그러면 conda로 뭔가를 새로 설치하게 되고, 시스템은 뒤죽박죽이 되어 재현하기 어려운 문제를 발생하게 된다는 것이다.

프로그램 설치 기록을 살펴보았다. Conda를 썼다가 다시 pip로 설치를 하고 이어서 또 conda를 쓰는... 매우 바람직하지 않은 방법으로 컴퓨터를 관리해오고 있었다. Conda 4.6.0에서는 아직 베타 수준이지만 pip가 설치한 패키지들을 점검하여 유연한 관리를 하는 기능이 포함되어 있다고 한다.

아나콘다 웹사이트에서 제시한 "Best Practices Checklist"는 다음과 같다.
  • Conda를 써서 되도록 많은 패키지를 설치한 뒤에 pip를 써라
  • 필요하다면 Conda 환경을 새로 만들어라
  • Conda 패키지를 추가 설치하는 가장 좋은 방법은 conda environment를 새로 만드는 것이다
  • Conda와 pip 설정 상태를 텍스트 파일로 저장해 두어라
하나의 conda 환경에 되도록 많은 추가 패키지를 설치하는 버릇을 들여왔었는데, 오늘 찾은 모범답안에 의하면 그것은 매우 바람직하지 않은 일이었다. 그러나 프로그램마다 conda environment를 하나씩 만들면 오히려 관리하기는 더 나빠진다. 특히 연달아 실행해야 하는 프로그램이 전부 다른 conda environment에 있다면 그 실행 과정이 얼마나 불편할지는 불을 보듯이 뻔하다.

보다 합리적인 운용 방안을 위해서 고민해 보자.

댓글 없음: