# 파이선 가상환경 환경변수 설정
가상환경에서 상황에 맞는 각자의 환경변수를 설정할 필요가 있습니다. 이번 글에서는 콘다와 virtualenv의 기능을 이용해서 환경을 변경할 때마다 필요한 환경변수를 설정하거나 설정 취소하는 방법을 알아봅니다.
# 1. 배경
이전 글 파이선 가상환경 콘다 시작하기에서는 파이선 버전에 따른 가상환경을 설정하는 방법을 알아봤습니다. 예를들어 저는 airflow
라는 워크플로우 엔진을 사용하고 있습니다. 대부분 서비스처럼 위크플로우 엔진도 개발용과 서비스용으로 나눠서 제공합니다. 환경 변경할 때 함께 변경되어야 하는 환경변수를 다루는 방법을 알아봅니다.
# 2. 준비
# 2.1 airflow-staging 환경 만들기
airflow-staging
환경을 만듭니다.
$ conda create -n airflow-staging python=2.7
(airflow-staging) $ pip install -y airflow
airflow
홈 디렉토리를 설정하고 필요한 패키지를 설치합니다.
$ export AIRFLOW_HOME=~/airflow-staging
$ mkdir $AIRFLOW_HOME
$ pip install mysql-python
airflow
의 설정파일은 $AIRFLOW_HOME/airflow.cfg
입니다. 처음 airflow
명령을 실행하면, $AIRFLOW_HOME
에 해당 파일이 생성됩니다.
(airflow-staging) ~/airflow-staging $ airflow
[2017-04-21 13:20:51,070] {__init__.py:57} INFO - Using executor SequentialExecutor
usage: airflow [-h]
{resetdb,render,variables,connections,pause,task_failed_deps,version,trigger_dag,initdb,test,unpause,dag_state,run,list_tasks,backfill,list_dags,kerberos,worker,webserver,flower,scheduler,task_state,pool,serve_logs,clear,upgradedb}
...
airflow: error: too few arguments
(airflow-staging) ~/airflow-staging $ ls
airflow.cfg unittests.cfg
airflow.cfg
파일에서 [core]
의 airflow_home
, dags_folder
, base_log_folder
항목의 값이 $AIRFLOW_HOME
을 기준으로 설정된 것을 확인할 수 있습니다.
여기까지만 진행하고 airflow-develop
환경을 만들겠습니다. 이후 설치 방법은 다음 글 (opens new window)에서 참고하시기 바랍니다.
# 2.2 환경변수 설정/제거 하기
이제 본론입니다. 환경을 시작할 때 원하는 환경변수를 설정하고, 환경을 나올 때 환경변수를 제거하는 방법을 알아보겠습니다.
콘다가 현재 환경을 관리하는 홈 디렉토리로 이동합니다.
cd $CONDA_PREFIX
여기서 /etc/conda/activate.d
디렉토리를 만들면, 콘다는 이 디렉토리에 들어있는 모든 .sh
스크립트들을 환경이 활성화 될 때 같이 실행합니다.
mkdir -p ./etc/conda/activate.d
mkdir -p ./etc/conda/deactivate.d
touch ./etc/conda/activate.d/env_vars.sh
touch ./etc/conda/deactivate.d/env_vars.sh
이제 activate.d/env_vars.sh
파일을 열고 아래와 같이 설정합니다.
#!/bin/bash
export AIRFLOW_HOME=~/airflow-staging
deactivate.d/env_vars.sh
파일은 아래와 같이 unset
합니다.
#!/bin/bash
unset AIRFLOW_HOME
완성했습니다. 확인해보겠습니다.
$ source deactivate
$ echo $AIRFLOW_HOME
$ source activate airflow-staging
(airflow-staging) $ echo $AIRFLOW_HOME
/Users/$USER/airflow-staging
# 2.3 airflow-develop 환경 만들기
이제 airflow-develop
환경을 만들겠습니다. 세 가지 방법이 있습니다.
- 위와 동일하게, 하지만 이름만
airflow-develop
으로 반복해서 수행 conda env export
로 환경을 export,conda env create -f environment.yml
로 환경 importconda create clone
으로 환경 복제
1번은 재미없고, 2번은 이전 블로그 글에서 설명했으니 이번에는 3번을 해보겠습니다.
$ conda create --name airflow-develop --clone airflow-staging
Source: /Users/jp21227/miniconda3/envs/airflow-staging
Destination: /Users/jp21227/miniconda3/envs/airflow-develop
Packages: 9
Files: 7710
#
# To activate this environment, use:
# > source activate airflow-develop
#
# To deactivate this environment, use:
# > source deactivate airflow-develop
#
새로 만든 airflow-develop
환경에 들어가보니, 환경변수 설정도 함께 복제된 것을 확인할 수 있습니다.
$ source activate airflow-develop
(airflow-develop) $ echo $AIRFLOW_HOME
/Users/$USER/airflow-staging
새로 만든 환경을 위한 AIRFLOW_HOME
을 다시 개발환경에 맞게 설정합니다. etc/conda/activate.d/env_vars.sh
을 새로운 디렉토리에 맞게 설정하고 환경을 빠져나왔다 다시 진입합니다.
(airflow-develop) $ cd $CONDA_PREFIX
(airflow-develop) $ cat etc/conda/activate.d/env_vars.sh
#!/bin/sh
export AIRFLOW_HOME=~/airflow-develop
(airflow-develop) $ source deactivate
$ source activate airflow-develop
(airflow-develop) $ echo $AIRFLOW_HOME
/Users/jp21227/airflow-develop
unset
은 동일하니 deactivate 스크립트는 변경할 필요 없습니다.
이것으로 콘다 가상환경에서 환경에 맞는 환경변수를 설정하는 방법을 모두 알아봤습니다.
# 3. virtualenv 라면?
virtualenv
도 콘다와 매우 유사합니다. $VIRTUAL_ENV/bin/postactivate
파일과 $VIRTUAL_ENV/bin/predeactivate
파일을 이용합니다.
설정은 postactivate
에서
$ $VIRTUAL_ENV/bin/postactivate
#!/bin/bash
export AIRFLOW_HOME=~/airflow-staging
환경변수 제거는 $VIRTUAL_ENV/bin/predeactivate
파일에서
#!/bin/bash
unset AIRFLOW_HOME
기본 개념과 동작방식은 virtualenv
와 콘다가 동일하다고 생각하시면 됩니다.
# 4. 결론
파이선은 참 까다로운 언어입니다. 실제 서비스에서 사용하기에는 의존성 때문에 발생하는 문제가 너무 많습니다. 하지만 이것은 역설적으로 매우 많은 개발자들이 파이선을 사랑하기 때문에 발생하는 일일 것입니다. 언젠가 파이선을 능숙하게 사용할 날을 기대하며 글을 마칩니다.