본문 바로가기

프로그래밍/파이썬

[파이썬] pyenv, virtualenv, pip 이해하기

pyenv

개요

  • pyenv : 다양한 파이썬 버전을 설치하고 사용할 수 있도록 함. pyenv를 통해서 파이썬 버전에 대한 의존성을 해결할 수 있다.

  • virtualenv : 로컬에 다양한 파이썬 환경을 구축할 수 있도록 도와준다. 일반적으로 pip install 명령어를 통해서 패키지를 설치한다.

  • autoenv : autoenv 스크립트를 이용해서 (가상환경으로 설정한) 특정 프로젝트 폴더로 들어가면 .env파일을 찾아서 자동으로 개발 환경을 로딩해준다.

pyenv 설치, 버전확인

  1. pyenv version : 현재 사용하고 있는 파이썬 버전을 알려준다.

  2. pyenv versions : 로컬에 설치된 파이썬 리스트를 보여준다.

  3. pyenv install --list : 설치할 수 있는 파이썬 리스트를 보여준다.

    • 설치는 pyenv install <파이썬 버젼> 으로 입력한다.

    • 예제1) pyenv intall 3.6.1 설치후 pyenv versions 버전 확인결과

    $ pyenv versions
      system
      3.4.3
    * 3.5.3 (set by /home/username/.pyenv/version)
      3.5.3/envs/crawl
      3.5.3/envs/djang
      3.6.1
      crawl
      django
    • * 표시를 통해 현재 사용하고 있는 전역 파이썬 버전을 확인할 수 있다.

    • 초기 전역 파이썬 버전은 system이지만 pyenv global <파이썬 버전>을 통해서 전역 환경 설정을 해줄 수 있다.

  • 예제2) pyenv global 3.6.1 결과

    $ pyenv versions
      system
      3.4.3
      3.5.3
      3.5.3/envs/crawl
      3.5.3/envs/djano
    * 3.6.1 (set by /home/username/.pyenv/version)
      crawl
      django
    • 삭제는 pyenv uninstall <파이썬 버전>으로 입력한다.

pyenv-virtualenv 사용하기

가상환경을 세팅하려면 pyenvvirtualenv는 한몸처럼 움직인다.

  1. 만든다
    pyenv virtualenv <파이썬 버전> <가상환경 이름> : 새로운 개발환경을 만든다.

    • 설치된 파이썬 버전은 pyenv versions로 확인할 수 있다.

    • <파이썬 버전>을 생략하면 전역적으로 설정한 파이썬 환경으로 가상환경을 생성한다.

  1. 사용한다
    pyenv shell <가상환경 이름> 또는 pyenv activate <가상환경 이름>

    • 가상환경 이름이 생각이 안난다면 pyenv versions로 확인할 수 있다.

    • shell은 Python 버전과 virtualenv 모두 사용가능한 명령어

    • activate는 virtualenv에서만 사용가능한 명령어
      스크린샷, 2017-06-03 00-07-31
      만약, 다시 시스템 전역 파이썬 버전을 사용하고 싶다면 pyenv shell system을 사용하면 된다.

  1. 활성화/비활성화 한다

    • pyenv versions를 했을때 리스트에 나오는 가상환경들을 pyenv shell 명령어로 활성화할 수 있다.

    • 만약, virtualenv로 만든 가상환경의 경우에는 아래의 명령어를 입력한다.

      • pyenv activate <가상환경 이름> : 활성화

      • pyenv deactivate : 비활성화

  1. 삭제한다
    pyenv uninstall <가상환경 이름>

pip

pip는 파이썬으로 작성된 패키지(라이브러리)를 관리하는 프로그랭이다.

pip는 가상환경마다 파이썬 패키지를 따로 관리할 수 있도록 도와준다.
만약 사용해야할 라이브러리나 모듈이 있을 경우 pip install <설치모듈>을 적어주면 된다.

pip 이해하기

pip는 가상환경별로 서로 다른 패키지 목록을 보여준다.
에졔1예제2의 패키지 설치 목록이 다르다는 걸 보여준다.

만약 크롤링이 필요하다면 대표적으로 beautifulsoup4 패키지가 필요할 것이고,
웹 개발을 한다고 한다면 대표적으로 Django 패키지가 필요할 것이다.

예제1) 하나는 crawling이라는 가상환경의 pip list를 보여준다.
piplist1

예제2) 하나는 test라는 가상환경의 pip list를 보여준다.
스크린샷, 2017-06-03 01-00-48

pip 명령어

우분투 16.04 기준

pip 관련 명령어

  1. pip 설치하기

    • apt-get install python-pip

  1. pip 업그레이드 하기

    • pip install --upgarde pip

pip 패키지 관련 명령어

  1. 설치된 패키지 전체 목록 부르기

    • pip list : 자주 쓰는 명령어

  1. 업데이트가 필요한 패키지 보기

    • pip list --outdated

  1. 패키지 설치

    • pip install <패키지 이름>

    • pip install <패키지 이름>==<버전> : 특정 버전 패키지 설치

    • pip search <패키지 이름> : 패키지 이름이 확실하지 않은 경우 찾아보기

  2. 패키지 업그레이드

    • pip install --upgrade <패키지 이름> : 2번 명령어와 비슷하다.

  1. 패키지 삭제

    • pip uninstall <패키지 이름>

    • 패키지 이름을 모른다면 pip list로 확인

  1. 패키지 목록 얻기

    • pip freeze > requirements.txt

    • .txt 파일로 만들어놓으면 다른 개발환경에서 패키지 전체를 손쉽게 설치 가능

    • pip install -r requirements.txt로 다른 virtualenv에서 쉽게 설치 가능

파이참 인터프리터 설정

인터프리터

파이참 2017. 1 기준

  1. Settings - Project - Project Interpreter - 톱니바퀴 - More 에서 맞는 가상환경을 선택한다.

  1. 만약, 새로 추가한 가상환경이 보이지 않는다면 Settings - Project - Project Interpreter - Add local을 선택한 뒤 스크롤을 아래로 내리면 versions라는 폴더가 있다. 여기서 가상환경 이름을 선택하고, bin 폴더 내 python 파일을 선택한다.

파이참 unresolved preferences

스크린샷, 2017-06-03 01-04-11
파이참 IDE를 통해 작업하다보면 unresolved preferences 문제가 발생하는 경우가 있다.

'unresolved preferences' 발생원인

스크린샷, 2017-06-03 01-24-33
[출처] https://intellij-support.jetbrains.com/hc/en-us/community/posts/206598665-Unresolved-Reference-Errors-for-django?sort_by=votes

만약 Django라는 패키지를 가상환경에 설치했다면, 파이참 인터프리터(virtualenv)는 당장 Django라는 패키지를 인식하지 못한다.

'unresolved preferences' 해결법

스크린샷, 2017-06-03 01-04-37

Pycharm 2017. 1 버전 기준

  1. 작업중인 디렉토리를 Source Root로 지정해준다.

  2. File - Invalid Cashes / Restart 한다.

출처

궁금증

$ pyenv versions
  system
  3.4.3
* 3.5.3 (set by /home/username/.pyenv/version)
  3.5.3/envs/crawl
  3.5.3/envs/django
  crawl
  django
  1. 가상환경 파이썬 버전을 확인하면 똑같은 이름이 2개가 있는데 무슨 차이일까?

    • 위에 있는 것은 디렉토리 경로까지, 아래있는 것은 가상환경 이름만 보여준다.

  2. pyenv shell 과 activate 차이?

    • pyenv activate 명령어는 virtualenv에서 사용가능한 명렁어

  1. 가상환경마다 pip가 다르게 설치되는데, 그러면 중복해서 용량이 늘어나는가?

    • 그렇다. 같은 패키지라 할지라도 가상환경은 다르기 때문에 용량이 똑같이 늘어난다.