@senspond

>

개발>백엔드

파이썬 가상환경, 버전관리, Docker 환경 구성

등록일시 : 2024-02-08 (목) 06:22
업데이트 : 2024-02-08 (목) 06:59
오늘 조회수 : 2
총 조회수 : 728

    파이썬 가상환경 관리, requirements.txt 버전관리 , Docker 환경 구성 등의 내용을 정리해 본 글입니다.

    파이썬 가상환경 관리

    Python 3.3부터 별도의 설치없이 venv 라는 가상환경 표준 라이브러리가 제공됩니다. 아나콘다(anaconda) 로 가상환경 구성시 데이터과학에 필요한 기본 라이브러리들이 같이 설치가 되어 손쉽게 데이터과학을 위한 가상환경을 구성할 수 있지만, 가상환경이 조금 무겁다는 단점이 있습니다.


    가상환경 생성

    • 파이썬 공식(venv)

    python -m venv <가상환경이름>


    • 아나콘다(Anaconda)

    conda create -n <가상환경명> python=<버전>


    가상환경 활성화

    • 파이썬 공식(venv)

    # macOS / Linux
    source <가상환경이름>/bin/activate
    
    # Windows
    source <가상환경이름>\\Scripts\\activate

     

    • 아나콘다(Anaconda)

    conda activate <가상환경이름>


    가상환경 비활성화

    # 파이썬 공식
    deactivate
    
    # 아나콘다
    conda deactivate


    가상환경 삭제

    • 파이썬 공식(venv)

    가상환경이 설치된 디렉토리를 찾아서 제거해주면 됩니다.


    • 아나콘다(anaconda)

    conda remove --name [가상환경이름] --all


    가상환경에 패키지 관리

    가상환경에서 필요한 패키지를 설치, 관리하는 방법입니다.


    • 파이썬 공식

    # 패키지 설치
    pip install <패키지이름>
    
    # 패키지 목록 확인
    pip list
    
    # 패키지 업그레이드
    pip install --upgrade <패키지이름>
    
    # 패키지 삭제
    pip uninstall <패키지이름>

     

    • Anaconda

    # 패키지 설치
    conda install <패키지이름>
    
    # 패키지 목록 확인
    conda list
    
    # 패키지 업그레이드
    conda update <패키지이름>
    
    # 패키지 삭제
    conda remove <패키지이름>


    requirements.txt

    python 프로젝트의 의존성 정보가 담긴 텍스트 문서라고 할 수 있습니다.해당 프로젝트의 특정 파이썬 버전에서 정상적으로 동작되는 의존성 라이브러리 버전 들이 다를 수가 있기 때문에, 잘 관리해두어야 프로젝트 유지보수가 용이합니다.


    requirements.txt 파일 생성

    # 파이썬 공식
    pip freeze > requirements.txt 
    
    # 아나콘다
    conda list -e > requirements.txt


    간혹 아래 스샷처럼 @ file:/// 이런식으로 만들어 질 때가 있는데



    이럴 때는 아래 커맨드를 입력하면 됩니다.

     pip list --format=freeze  > requirements.txt


    requirements.txt로 패키지 설치

    # 파이썬 공식
    pip install -r requirements.txt
    
    # 아나콘다
    conda install --file requirements.txt


    설치가 되지않는 패키지는 건너뛰고, 설치가능한 패키지만 모두 설치하기(linux, centos)

    cat requirements.txt | xargs -n 1 pip install



    파이썬 Docker 환경 구성

    FastAPI 서버 예시

    requirements.txt

    fastapi>=0.68.0,<0.69.0
    pydantic>=1.8.0,<2.0.0
    uvicorn>=0.15.0,<0.16.0


    Dockerfile

    FROM python:3.10
    WORKDIR /api
    ENV TZ=Asia/Seoul
    COPY ./requirements.txt /api/requirements.txt
    RUN pip install --no-cache-dir --upgrade -r /api/requirements.txt


    docker-compose.yml

    version: "3.7"
    services:
      fastapi:
        image: fastapi
        command: uvicorn app.main:app --host 0.0.0.0 --port 8080 --reload
        env_file:
          - .env
        ports:
          - 8080:8080
        volumes:
          - ./app:/code/app


    FastAPI + Streamlit 예시

    백엔드가 fastAPI 서버가 되고 프론트엔드가 Streamlit이 되는 형태


    Dockerfile

    • backend/Dockerfile

    FROM python:3.11
    COPY requirements.txt app/requirements.txt
    WORKDIR /app
    ENV TZ=Asia/Seoul
    RUN pip install -r requirements.txt
    COPY . /app
    EXPOSE 8000
    CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000" ,"--reload"]


    • frontend/Dockerfile

    FROM python:3.11
    COPY requirements.txt app/requirements.txt
    WORKDIR /app
    RUN pip install -r requirements.txt
    COPY . /app
    ENV TZ=Asia/Seoul
    EXPOSE 8501
    ENTRYPOINT ["streamlit","run"]
    CMD ["streamlit_app.py"]


    docker-compose.yml

    version: '3.8'
    services:
      frontend:
        build: frontend
        ports:
          - 8501:8501
        depends_on:
          - backend
        volumes:
          - ./frontend:/app
        restart: always
        networks:
          - app
        container_name: frontend
        
      backend:
        build: backend
        ports:
          - 8000:8000
        volumes:
          - ./backend:/app
        restart: always
        networks:
          - app
        container_name: backend
    
    networks:
      app:
        driver: bridge


    Refference




    senspond

    안녕하세요. Red, Green, Blue 가 만나 새로운 세상을 만들어 나가겠다는 이상을 가진 개발자의 개인공간입니다.

    댓글 ( 0 )

    카테고리내 관련 게시글

    현재글에서 작성자가 발행한 같은 카테고리내 이전, 다음 글들을 보여줍니다

    @senspond

    >

    개발>백엔드

    • 파이썬 백엔드 Fast API gunicorn 으로 구동하기 ( WSGI, ASGI, uvicorn 한계 정리)

      파이썬 백엔드 Fast API gunicorn 으로 구동하기 ( WSGI, ASGI, uvicorn 한계 정리)
        2024-02-21 (수) 07:21
      1. 네이버 이메일 SMTP 프로토콜로 이메일 발송 프로그램 만들기 ( jakarta.mail )

        개인목적으로 자동화에 활용 할 메일발송 프로그램을 Java기반으로 jakarta Mail로 만들어 보며 정리를 해보았습니다.
          2024-06-21 (금) 01:23
        1. [현재글] 파이썬 가상환경, 버전관리, Docker 환경 구성

          파이썬 가상환경 관리, requirements.txt 버전관리 , Docker 환경 구성 등의 내용을 정리해 본 글입니다.
            2024-02-08 (목) 06:22