[Python] 가상환경(pyenv-virtualenv) 파이썬을 crontab에서 실행하기
pyenv-virtualenv를 이용해 가상환경에서 만든 파이썬을 crontab에 추가해 실행하는 방법을 알아보자
환경
- Linux
- pyenv
- pyenv-virtualenv
글 배경
배경
- 파이썬 버전에 따른 의존성을 없애기 위해
pyenv
와pyenv-virtualenv
와 같은 가상환경을 사용하는데 가상환경에서 만든 코드를crontab
에서 실행할 상황이 생겼다. crontab
뿐만 아니라systemd
에 서비스를 등록할 때나 쉘스크립트를 작성해서 실행할 때도 적용 가능하다.
사전 지식
파이썬 모듈과 경로
- 결국 파이썬을 실행할 때 중요한 부분은 여러가지가 있겠지만 모듈이 저장된 위치와 사용할 파이썬이 어디에 위치하냐가 중요하다.
sys.path
sys.path
: 파이썬 모듈을 사용할 때 참조하는 경로를 저장하고 있는 리스트입니다.import
를 사용해서 모듈을 가져올 때 참조하게 됩니다.
>>> import sys
>>> sys.path
['', '/home/twpower/.pyenv/versions/3.6.2/lib/python36.zip', '/home/twpower/.pyenv/versions/3.6.2/lib/python3.6', '/home/twpower/.pyenv/versions/3.6.2/lib/python3.6/lib-dynload', '/home/twpower/.pyenv/versions/jupyter-notebook/lib/python3.6/site-packages']
pyenv versions
pyenv
를 통해 설치된 여러 파이썬 버전들을 볼 수 있는 명령어pyenv-virtualenv
를 통해 만든 가상환경들도 목록에 나온다.
$ pyenv versions
* system (set by /home/twpower/.pyenv/version)
3.5.2
3.5.3
3.6.1
3.6.2
3.6.2/envs/jupyter-notebook
3.6.2/envs/test
jupyter-notebook
test
pyenv path
- 위에 나온
pyenv versions
에 해당하는 파이썬 및 모듈들은$(pyenv root)/versions
의 경로에 있다.
$ ls /home/twpower/.pyenv/versions/
3.5.2 3.5.3 3.6.1 3.6.2 jupyter-notebook test
적용 방법
방법1 - 사용할 가상환경의 파이썬을 직접 선택
pyenv-virtualenv
는 가상환경마다 사용하는 파이썬이 다릅니다. 그렇기에 사용하는 경로도 다르고 그에 따른sys.path
도 다릅니다.pyenv-virtualenv
에서 사용하는 파이썬을 직접 이용해.py
파일을 실행하면 됩니다.- 경로:
[pyenv root]/versions/[virtualenv name]/bin/[python version]
crontab
30 20 * * * /home/twpower/.pyenv/versions/jupyter-notebook/bin/python3.6 /home/twpower/test.py
방법2 - 스크립트에서 “pyenv activate”를 사용
- 쉘 스크립트로 파일을 만들고 해당 스크립트에
pyenv activate
를 통해 가상환경을 만들어주고 파이썬 코드를 실행합니다.
test.sh
#!/bin/bash
source /home/twpower/.bash_profile
source /home/twpower/.bashrc
pyenv activate jupyter-notebook
python /home/twpower/test.py
crontab
30 20 * * * /home/twpower/test.sh