Python 프로젝트를 관리하다 보면 특정 Python 버전에서 특정 패키지의 의존성을 설치해야 하는 경우가 자주 발생합니다. 이 글에서는 Ubuntu에서 Virtualenv를 활용해 다양한 Python 버전에 대해 특정 패키지를 오프라인으로 다운로드하는 방법을 소개합니다.
Ubuntu 환경 준비
먼저, Ubuntu에 필요한 Python 버전을 설치하고 Virtualenv 환경을 구성합니다.
1. Python PPA 추가
Ubuntu 기본 저장소에는 최신 Python 버전이 포함되지 않는 경우가 많습니다. 이를 해결하기 위해 deadsnakes PPA를 추가하여 필요한 Python 버전을 설치합니다.
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:deadsnakes/ppa
sudo apt update
2. Python 및 Virtualenv 설치
다양한 Python 버전을 설치하고 각 버전에 맞는 venv 모듈을 포함합니다.
sudo apt install -y python3.8 python3.8-venv python3.9 python3.9-venv python3.10 python3.10-venv
3. Python 설치 확인
설치된 Python 버전을 확인하여 정상적으로 설치되었는지 확인합니다.
python3.8 --version
python3.9 --version
python3.10 --version
PostgreSQL 개발 도구 설치
일부 Python 패키지(예: psycopg2)는 PostgreSQL 개발 라이브러리인 libpq-dev를 필요로 합니다. 이를 미리 설치하여 의존성 오류를 방지합니다.
sudo apt install -y libpq-dev
Virtualenv를 활용한 특정 패키지 다운로드
아래 스크립트를 사용해 지정된 Python 버전 각각에 대해 Virtualenv 환경을 만들고, 특정 패키지를 오프라인 다운로드합니다.
Bash 스크립트
#!/bin/bash
# Python 버전 목록
PYTHON_VERSIONS=("3.8" "3.9" "3.10")
PACKAGE_NAME="psycopg2"
PACKAGE_VERSION="2.9.5"
OUTPUT_DIR="/root/offline_packages"
PIP_INDEX_URL="<https://pypi.org/simple>"
# Virtualenv 작업 디렉토리
VENV_DIR="/tmp/venv_packages"
# PostgreSQL 개발 도구 설치
echo "Installing PostgreSQL development tools..."
sudo apt update
sudo apt install -y libpq-dev
# 출력 디렉토리 생성
mkdir -p ${OUTPUT_DIR}
# 각 Python 버전에 대해 virtualenv 생성 및 패키지 다운로드
for PYTHON_VER in "${PYTHON_VERSIONS[@]}"; do
echo "Processing Python ${PYTHON_VER}..."
# Virtualenv 생성
VENV_PATH="${VENV_DIR}/python${PYTHON_VER}"
python${PYTHON_VER} -m venv ${VENV_PATH}
# Virtualenv 활성화
source ${VENV_PATH}/bin/activate
# pip 업그레이드
pip install --upgrade pip
# 패키지 다운로드
pip download "${PACKAGE_NAME}==${PACKAGE_VERSION}" \\
-d "${OUTPUT_DIR}" \\
--index-url "${PIP_INDEX_URL}"
# Virtualenv 비활성화
deactivate
done
echo "All packages have been downloaded to ${OUTPUT_DIR}."
스크립트 주요 포인트
- Virtualenv 생성 각 Python 버전에 대해 독립적인 Virtualenv 환경을 생성하여 패키지 의존성을 격리합니다.
- 패키지 다운로드
pip download명령어를 사용해psycopg2패키지의 특정 버전을 오프라인으로 다운로드합니다. 다운로드된 파일은OUTPUT_DIR로 지정된 디렉토리에 저장됩니다. - PostgreSQL 의존성 해결
psycopg2는 PostgreSQL의 개발 라이브러리를 필요로 하므로, 스크립트 실행 전에libpq-dev패키지를 설치합니다.
스크립트 실행 결과
스크립트를 실행하면 지정된 모든 Python 버전에 대해 다음 작업이 수행됩니다:
- Virtualenv 환경 생성
pip업데이트- 지정된 패키지(
psycopg2) 다운로드
모든 다운로드된 파일은 /root/offline_packages 디렉토리에 저장됩니다. 이렇게 저장된 패키지는 네트워크가 제한된 환경에서도 사용할 수 있습니다.
결론
Ubuntu에서 다양한 Python 버전에 대해 Virtualenv를 활용하여 특정 패키지를 오프라인으로 다운로드하는 방법을 살펴보았습니다. 이 방법은 네트워크 연결이 제한된 환경에서 Python 의존성을 안정적으로 관리해야 하는 경우 특히 유용합니다.