python 첫 세팅 관련 (VS Code, 가상환경, Docker)

예진욱·2024년 8월 9일

python

목록 보기
1/1

Python Download

VS Code Download



🔗 Python 환경 변수 설정

  • 시스템 변수의 Path 에 추가한다.
  • C:\Users{UserName}\AppData\Local\Programs\Python{PythonVersion}
  • C:\Users{UserName}\AppData\Local\Programs\Python{PythonVersion}\Scripts
  • cmd 에서 python --version 입력 후 환경변수 세팅 완료 및 버전 확인

🔗 VS Code Terminal Git Bash 설정

  • Windows 기본값 : PowerShell (PowerShell 로는 conda 명령어 인식이 잘 안 될 수 있음)
  • Ctrl + , 으로 세팅 진입 → terminal.integrated.defaultprofile.windows 입력
  • Git Bash 선택 후 재기동

📜 Python 가상환경이란?

  • 가상환경(Virtual Environment)은 파이썬에서 독립적인 프로젝트를 위한 개별적인 공간.
    여러 프로젝트를 진행할 때 각 프로젝트의 '의존성(dependencies)'과 '라이브러리(libraries)'를 구분하여 관리할 수 있게 해줌.
    이를 통해 한 시스템에서 서로 다른 버전의 파이썬 라이브러리를 사용할 수 있다.
    • 일반적으로 하나의 디렉토리 안에 여러 개의 프로젝트가 있을 때, 각 프로젝트별로 가상환경을 만든다.
  • 가상환경 세팅의 장점
    • 프로젝트 분리: 다양한 프로젝트에서 서로 다른 라이브러리 버전을 사용할 수 있어, 한 프로젝트에서의 변경이 다른 프로젝트에 영향을 미치지 않음.
    • 의존성 관리: 프로젝트별로 필요한 라이브러리와 버전을 명확히 관리할 수 있어, 코드의 호환성 및 재현성을 높일 수 있음.
    • 개발 환경 일관성: 다른 개발자와 협업 시, 같은 환경에서 작업함으로써 발생할 수 있는 문제를 최소화.
  • 가상환경 디렉토리는 git 에 올리지 않는다.

📜 Venv vs Conda

  • venv
    • venv는 Python 표준 라이브러리에 포함된 가상환경 관리 도구.
    • Python 3.3부터 기본적으로 제공되며, 특정 프로젝트의 종속성 관리를 위해 가상환경을 생성할 수 있음.
    • 터미널에서 python, pip 명령어로 사용한다.
  • conda
    • conda는 Anaconda와 Miniconda 배포판에 포함된 가상환경 및 패키지 관리 도구.
    • Python뿐만 아니라 다른 언어와의 호환성을 제공하며, 데이터 과학 및 머신러닝 프로젝트에서 주로 사용됨.
      • 멀티 언어 지원: Python뿐만 아니라 R, Ruby, Lua 등 다양한 언어의 패키지를 관리할 수 있음.
      • 패키지 관리: 패키지 관리와 가상환경 관리를 통합하여 더 나은 종속성 해결을 제공합니다.
      • 대형 패키지 지원: 데이터 과학, 머신러닝 등에서 자주 사용되는 대형 패키지(예: NumPy, Pandas, TensorFlow 등)를 쉽게 설치하고 관리할 수 있음.
    • 터미널에서 conda 명령어로 사용한다.

🔗 VS Code 에서 Venv 가상환경 세팅

  • python 표준 라이브러리에 포함되어 별도 설치 X

  • 프로젝트별로 내부에 .venv 디렉토리를 생성하는 것이 일반적이다.

  • https://code.visualstudio.com/docs/python/environments

  • Ctrl + Shift + P → Python: Create Environment

  • Create Environment dropdown

  • 이후 설치 과정 중 python interpreter 를 선택하면, 좌측 프로젝트 구조에 .venv 디렉토리가 추가된 것을 볼 수 있다.

  • Virtual environment interpreter selection

  • 다만 위 방법은 현재 Terminal 의 위치가 아닌 VS Code 가 열린 프로젝트 의 root 에 설치가 되므로,
    원하는 디렉토리에서 터미널 명령어로 만드는 것이 더 좋아 보인다.

    $ python -m venv ./{디렉토리명}   # 현재 터미널 기준 디렉토리 하위에 {디렉토리명} 으로 생성
  • venv 가상환경 activate / deactivate 하기

    $ source {디렉토리명}/Scripts/activate  # 활성화, {디렉토리명} 의 상위 디렉토리에서 실행
    $ deactivate      # 비활성화
  • 활성화가 된다면, 아래와 같이 터미널의 라인 앞에 (venv) 텍스트가 뜬다.

  • pip install 로 라이브러리 설치

    $ pip install {package_name}=={version}   # 패키지명만 입력하면 최신 버전 설치
    $ pip list # 설치된 pip 라이브러리 확인
    $ pip uninstall {package_name}
  • 로컬에서 python 실행


🔗 VS Code 에서 Conda 가상환경 세팅

  • Anaconda 가상환경 Download

  • OS 전역적으로 conda 명령어를 통해 사용되며, 가상환경 세팅 경로는 특정 디렉토리 안에 모아둔다.

  • Windows - 환경 변수 적용

    • anaconda 설치 시 시스템이 지정하는 기본 경로에 설치했다면, 아래 3개의 변수를 시스템 변수에 추가한다.
    • C\Users{UserName}\miniconda3
    • C\Users{UserName}\miniconda3\Library
    • C\Users{UserName}\miniconda3\Scripts
  • 위 환경변수를 적용했음에도 conda 명령어 인식이 되지 않는다면, 변수를 아래 값으로 설정하자.

    • C:\Users{UserName}\AppData\Local\miniconda3
    • C:\Users{UserName}\AppData\Local\miniconda3\Library
    • C:\Users{UserName}\AppData\Local\miniconda3\Scripts
  • Terminal 에서 conda 명령어를 정상적으로 인식하는지 확인

    $ conda --version
    $ conda init bash  # bash Terminal 을 사용한다면 최초 한 번 실행해주어야 한다.
  • 유료 repository 에서 라이브러리를 가져왔다가 괜히 불상사가 생길 수 있으므로, repository 채널을 바꾸도록 하자.

    $ conda config --add channels conda-forge
    $ conda config --set channel_priority strict


    이후 repository channel 확인

    $ conda config --show channels

    위와 같이 conda-forge repository(channel) 이 우선적으로 사용되게 할 수 있는데, 이마저도 불안하니 defaults 를 삭제하자.

    $ conda config --remove channels defaults

  • Terminal 에서 conda 명령어로 가상환경을 직접 생성해보자.

    # 가상환경 생성 (env_name은 가상환경 이름)
    $ conda create --name {env_name} python={3.xx}
    # 내 OS 에 생성된 가상환경 리스트 나열
    $ conda env list

가상환경이 생성되었다면,
C:\Users{userName}\AppData\Local\miniconda3\envs 혹은
C:\Users{userName}\miniconda3\envs 디렉토리에 {env_name} 명으로 디렉토리가 생성되었을 것이다. (환경변수가 인식하는 위치)
앞으로는 conda 가 가상환경 디렉토리는 해당 위치에 모아놓을 것이니 참고해 두도록 하자.

# 가상환경 활성화
$ conda activate {env_name}

활성화가 잘 되었다면, 위에서 언급한 venv 와 같이 터미널 라인 앞에 활성화된 (가상환경명)이 출력된다.

# 가상환경 비활성화
$ conda deactivate
# 라이브러리 설치 (pip install 로 해도 무방)
$ conda install {package_name}
# 라이브러리 삭제 
$ conda remove {package_name}  # pip 는 remove 가 아닌 uninstall
# 해당 가상환경에서 설치된 라이브러리들 나열
$ conda list
  • conda 가상환경이 활성화된 상태에서 라이브러리가 설치되면,
    • C:\Users{UserName}\AppData\Local\miniconda3\envs{EnvName}\Lib\site-packages 혹은
    • C:\Users{UserName}\miniconda3\envs{EnvName}\Lib\site-packages 디렉토리에 설치되니 참고하자.
  • 참고로 내가 원하는 라이브러리를 설침했는데 import 오류가 발생하는 에러메시지가 출력되면, vscode 에서 interpreter 타겟을 제대로 설정했는지 확인해보자.

    Ctrl + Shift + P 를 눌러 Python: Select Inerpreter 를 검색하면

위와 같이 나오는 리스트에서 \miniconda3\envs\ 디렉토리 하위에 내가 설정한 conda env name 으로 선택하면 된다.

# env 삭제 명령어
$ conda remove --name {env_name} --all

📜 conda install 과 pip install 의 차이

pipconda
패키지 관리자Python 환경에서 Python 패키지를 관리Python 자체를 관리 가능하며, 다른 언어도 관리가 가능
패키지 출처Python 패키지 인덱스 (PyPI)
최신 라이브러리가 많다.
Conda Repository
PyPI 에 있는 최신 라이브러리를 따라가지는 못하지만,
Data Science 관련한 라이브러리가 많다.
환경 관리Python 패키지를 관리하나, 버전 호환성을 보장하지는 않음.패키지 설치 시 종속성을 관리, 해당 패키지의 모든 종속성을
자동으로 설치하고, 충돌을 방지하기 위해 버전 호환성을 보장함.
속도소스에서 패키지를 설치해야 하는 경우가 있어,
일부 패키지는 컴파일 과정이 필요하며 시간이 더 걸릴 수 있음.
바이너리 패키지를 설치하기 때문에 컴파일 과정이 필요 없어 일반적으로 설치가 빠름.
용도Python으로 작성된 패키지를 설치할 때 주로 사용
특히 최신의 Python 라이브러리를 설치할 때 유용
복잡한 라이브러리 버전 호환이 필요할 때
Data Science 관련한 라이브러리를 사용할 때

아래는 conda 가상환경을 python 3.12 로 만들어 활성화 한 후 , pip install selenium 후 conda env list 출력한 예시이다.

python 의 경우에는 conda 자체에서 관리되며, pip install 을 했으므로 Channel = pypi 로 출력됨을 볼 수 있다.


🔗 Python 프로젝트를 venv Docker 이미지로 Build 하고, 컨테이너 기동하기


우선 실행환경에 docker 설치 및 실행이 완료되었다는 가정하에 진행한다.
conda docker 로 사용하기에는 조금 무거운 감이 있어, venv 환경에서 띄우는 것을 진행해보자.

python 프로젝트 내부에 Dockerfile 파일을 추가한다.

# Dockerfile

# 베이스 이미지로 Python 사용
FROM python:3.12.4-slim

# 작업 디렉토리 생성
WORKDIR /app

# 필요 파일 복사
COPY requirements.txt requirements.txt
COPY app.py app.py

# 의존성 설치
RUN pip install --no-cache-dir -r requirements.txt

# app.py 파일 실행
CMD ["python", "app.py"]

위 파일에서는 requirements.txt 파일을 기반으로 pip install 을 진행하므로,
requirements.txt 파일에 어떤 라이브러리들을 설치할 지 명시해야 한다.

# requirements.txt
# 예시)
Flask
Selenium

이제 Terminal 에서 Docker 이미지를 만들어보자.

# Docker 이미지 빌드
$ docker build -t {image_name} .
ex) docker build -t test .
# Docker 컨테이너 실행
$ docker run -d -p {host_port}:{container_port} {image_name}
ex) docker run -d -p 8080:5000 test

실제로 잘 구동되는지 확인하기 위해, api 를 만들고 응답을 테스트해보자. flask 는 간단한 api 구현을 위한 라이브러리이다.
아래 코드는 localhost:5000 에 접속 시 "Hello, World" 를 리턴하는 API 를 명세한 것이다.

$ pip install flask
# app.py
from flask import Flask

app = Flask(__name__)

@app.route('/hello')
def hello():
    return "Hello, World"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

위에서 언급한대로 image 를 빌드하고 컨테이너를 띄워보자.

이미지를 Terminal 에서 띄운 모습.

Docker 에서 이미지가 생성된 화면. (Windows)

$ docker images  # 명령어로도 image 생성 확인 가능.

docker run

기동이 잘 됐는지 확인하기 위해, localhost:8080/hello 에 접속해보자.
외부 포트 8080 -> 도커 내부 포트 5000 에 매핑하였으므로 정상적으로 출력될 것이다.

profile
Spring 백엔드 개발자

0개의 댓글