Joonas' Note

Joonas' Note

아나콘다(Anaconda) 없이 가상환경 세팅하기 본문

개발/python

아나콘다(Anaconda) 없이 가상환경 세팅하기

2023. 1. 7. 23:40 joonas

    개요

    아나콘다(Anaconda)는 파이썬의 버전과 패키지들의 버전을 쉽게 관리할 수 있게 해주는 강력한 솔루션이다.

    하지만 200명 이상 규모의 회사에서는 개인용 버전인 Anaconda Distribution을 사용할 수 없다고 한다.
    그리고 어떤 패키지들은 아나콘다에서 추적하지 못할 수도 있다.

    파이썬의 버전과 각 프로젝트에 맞는 가상환경을 쉽게 구축하고 관리하는 것을 아나콘다의 기능이라고 보고,
    이번 글에서는 아나콘다를 사용하지 않고 classic하게 관리하는 환경을 구축한다.

    먼저, 크게 세 가지로 나눠서 접근해보자.

    1. 파이썬 버전 관리
    2. 패키지 관리
    3. 가상 환경 관리

    파이썬 버전 관리

    파이썬은 특정 패키지들이 버전을 지원하지 않으면 버전을 내려야하는 경우들이 종종 있다. 예를 들면 Python 3.7 에서만 설치가 되는 패키지들의 기가막힌 조합이 있을 가능성도 있다.

    이런 상황에는 python을 직접 여러 버전을 설치해두고 특정 버전으로 가상 환경을 생성하면 되지만, 파이썬을 설치하거나 버전을 잠시 변경하는 것이 몹시 번거로운 일이다. 이런 문제를 해결하기 위한 패키지가 pyenv 이다.

     

    GitHub - pyenv/pyenv: Simple Python version management

    Simple Python version management. Contribute to pyenv/pyenv development by creating an account on GitHub.

    github.com

    설치

    위의 GitHub Repository의 README를 보면, Linux/Mac의 시스템별로 brew, git, pip를 통한 설치 등 다양한 설치 방법을 안내하고 있다.

    가장 간단한 방법은, bash에서 아래 커맨드를 입력하는 것이다.

    curl https://pyenv.run | bash

    안타깝게도 Windows OS의 경우에는 공식적으로 지원하지는 않는다. 하지만 Windows에서 설치 가능하도록 https://pyenv-win.github.io/pyenv-win/ 에서 별도로 관리되고 있다.

    PS C:\WINDOWS\system32> Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"                   & : 이 시스템에서 스크립트를 실행할 수 없으므로 C:\WINDOWS\system32\install-pyenv-win.ps1 파일을 로드할 수 없습니다. 자
    세한 내용은 about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오.
    위치 줄:1 문자:173
    + ... n.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
    +                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : 보안 오류: (:) [], PSSecurityException
        + FullyQualifiedErrorId : UnauthorizedAccess

    PowerShell을 관리자 권한으로 실행하고, 아래와 같이 "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine" 명령을 실행한 후에, 다시 설치 커맨드를 입력하면 설치가 정상적으로 완료된다.

    PS C:\WINDOWS\system32> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
    
    실행 규칙 변경
    실행 정책은 신뢰하지 않는 스크립트로부터 사용자를 보호합니다. 실행 정책을 변경하면 about_Execution_Policies 도움말
    항목(https://go.microsoft.com/fwlink/?LinkID=135170)에 설명된 보안 위험에 노출될 수 있습니다. 실행 정책을
    변경하시겠습니까?
    [Y] 예(Y)  [A] 모두 예(A)  [N] 아니요(N)  [L] 모두 아니요(L)  [S] 일시 중단(S)  [?] 도움말 (기본값은 "N"): Y

    PermissionDenied로 여전히 안 된다면 여기를 참고해보기

    설치가 끝나고 나면, 쉘을 다시 시작해야 한다.

    사용법

    pyenv가 설치가 잘 되었는 지 확인하는 명령어이다.

    pyenv --version

    pyenv install -l 을 입력하면 설치 가능한 버전 리스트가 출력된다.

    PS C:\Users\joonas> pyenv install -l
    :: [Info] ::  Mirror: https://www.python.org/ftp/python
    2.4-win32
    2.4.1-win32
    2.4.2-win32
    ...
    3.12.0a2
    3.12.0a3-win32
    3.12.0a3-arm

    pyenv install <설치하려는 버전> 을 실행하면 해당 버전의 파이썬을 설치할 수 있고, 여러 버전을 설치하는 것도 가능하다.

    pyenv install 3.10.4

    pyenv versions 를 실행하면 현재 설치되어있는 파이썬 버전이 출력되고, 그 외에도 pyenv commands 를 입력하면 사용 가능한 명령어들이 나온다.

    중요한 명령어는 pyenv which python 이다. 현재 pyenv로 설정한 파이썬 버전의 실제 파일 위치를 출력하기 때문이다.
    전체 경로를 입력해서 파이썬을 직접 실행할 수도 있고, VS Code에서 파이썬 인터프리터를 직접 설정할 때도 이 경로가 필요하다.


    패키지 관리

    파이썬을 설치하면 보통은 pip가 함께 설치된다. pip는 package installer for Python인데 패키지를 설치하는 소프트웨어이다.
    pyenv를 통해서 설치했다면 pyenv which pip 로 설치된 위치를 확인할 수 있다.

    pip는 CLI에서 실행하는 데, 실행 방법은 크게 두 가지이다.
    방법 하나는 pip를 직접 실행하는 pip <명령어> 이고, 다른 하나는 파이썬을 통해 실행하는 python -m pip <명령어> 이다.

    흔히 파이썬 프로젝트에서 아래와 같이 생긴 requirements.txt 를 본 기억이 있을 것이다. 여기에는 패키지들의 이름과 버전이 적혀있을 뿐이다.

    aiofiles==0.8.0
    atomicwrites==1.4.1
    attrs==22.2.0
    autopep8==2.0.1
    cleo==0.8.1
    clikit==0.6.2

    명령어 pip -r requirements.txt 는 이 텍스트 파일에 적힌 패키지와 그 버전을 설치하는 작업을 수행한다.

    현재 내가 사용하고 있는 python 환경에 설치된 패키지 목록을 보고 싶으면 pip freeze 로 확인할 수 있다.

    $ pip freeze
    absl-py==0.12.0
    alabaster==0.7.12
    albumentations==1.1.0
    alembic==1.7.5
    antlr4-python3-runtime==4.9.2
    anyio==3.6.1
    ...

    현재 내 환경에 설치된 패키지 버전을 텍스트 파일로 추출하고 싶다면, 보통 bash 환경에서는 pip freeze > requirements.txt 로 간단하게 만들 수 있다.


    가상 환경

    pip를 통해 패키지를 설치하다보면, 실행했던 python의 설치 경로 아래 Lib 또는 site-packages 에 패키지들이 설치된다.

    위처럼 requirements.txt 로 설치하는 경우에는, 이미 어떤 버전으로 설치된 패키지를 다른 버전으로 설치하려는 경우가 발생할 수 있다. 그리고 이런 경우에는 그 버전이 다른 패키지들과 호환이 될 지 모르기때문에 패키지 간의 "버전이 꼬이는 경우"가 발생한다.

    이런 상황을 피하기 위해서, 각 프로젝트마다 별도의 패키지 설치 공간을 마련하고 싶을 수 있다. 그것이 가상 환경이고, 파이썬 패키지 중에 virtualenv 이 가장 유명하다.

     

    Virtualenv — virtualenv 20.17.2.dev10+gbeb7d66 documentation

    © Copyright 2007-2023, PyPA, PyPA. Revision beb7d66b. Last updated on 2023-01-03T05:17:13.625836.

    virtualenv.pypa.io

    설치

    간단하게, 미리 설치한 파이썬을 이용해서 pip install virtualenv 로 설치할 수 있다.

    $ pip install virtualenv

    환경 생성

    아래와 같이 가상환경을 생성할 수 있다. 명령어를 실행한 위치에, 입력한 가상환경이름으로 된 디렉토리가 생성되어 있을 것이다.

    $ python -m virtualenv <가상환경이름>

    pyenv를 통해서 설치한 특정 버전으로 가상 환경을 생성하고 싶다면 다음과 같다.

    $ pyenv which python
    C:\Users\joona\.pyenv\pyenv-win\versions\3.10.4\python.exe
    $ virtualenv .virtual-env --python=/c/Users/joona/.pyenv/pyenv-win/versions/3.10.4/python.exe
    created virtual environment CPython3.10.4.final.0-64 in 6530ms

    활성화

    생성된 가상 환경 디렉토리 아래에 bin 또는 Scripts 라는 디렉토리가 있다. 그 아래에 activate 를 실행하면 해당 가상 환경으로 진입할 수 있다. 진입했는 지는 쉘 환경에 따라 다른데, 대부분 프롬프트 어딘가에 괄호로 갑자기 이름이 표시된다.

    # Windows + Git bash
    ~ $ source .virtual-env/Scripts/activate
    ~ (.virtual-env) $ python -V
    Python 3.10.4
    
    # Windows + CMD
    CMD> .virtual-env\Scripts\activate
    (.virtual-env) CMD> python -V
    Python 3.10.4
    
    # Linux/Mac
    ~ $ source .virtual-env/bin/activate
    ~ (.virtual-env) $ python -V
    Python 3.10.4

    비활성화

    가상환경에서 나가는 방법은 가상 환경이 활성화 된 상태에서 deactive 를 입력하면 된다.


    패키지 관리 + 가상 환경

    가상 환경과 패키지 관리를 동시에 수행해주는 패키지도 있다. 이름은 pipenv 인데, 공식 설명에서부터 pip + virtualenv를 한 번에 가능한 것이 목적으로 보인다.

     

    Pipenv: Python Dev Workflow for Humans — pipenv 2022.12.20.dev0 documentation

    Pipenv: Python Dev Workflow for Humans Pipenv is a tool that aims to bring the best of all packaging worlds (bundler, composer, npm, cargo, yarn, etc.) to the Python world. Windows is a first-class citizen, in our world. It automatically creates and manage

    pipenv.pypa.io

    pyenv 중에도 virtualenv 라는 플러그인이 있다고한다. 자세한 내용은 검색해보면 많이 나올 것 같다.


    참고

     

    What is the difference between pyenv, virtualenv, anaconda?

    I am a ruby programmer trying to learn python. I am pretty familiar with pyenv since it is like a copy and paste from rbenv. Pyenv helps allow to have more than one version of python in a system an...

    stackoverflow.com

     

    pipenv로 패키지 관리하기

    Engineering Blog by Dale Seo

    www.daleseo.com

     

    Comments