JUST WRITE

버전관리가 가능한 python 환경 세팅 - pyenv 설치 본문

Programing/Python

버전관리가 가능한 python 환경 세팅 - pyenv 설치

천재보단범재 2023. 4. 29. 12:56

pyenv 설치

pyenv

python으로 개발을 진행하다 보면 항상 버전 문제로 골머리를 앓게 됩니다.

python이 제공하는 library가 정말 다양해서 편하기도 하지만 단점도 존재합니다.

필요한 python library가 특정 python 버전까지만 지원한다든지,

python library와 종속된 library끼리 compatible 한 버전을 맞춰야 하는 발생 합니다.

python에서 virtual 환경을 구성, 독립된 환경에서 다른 프로젝트에 영향이 없도록 세팅할 수 있습니다.

venv라는 것을 기본적으로 제공해 줍니다.

 

venv

venv venv는 특정 Path에 Virtual Environment를 제공해주는 Python Package이다. Virtual Environment덕분에 경량화되고 고립된 환경에서 Python을 이용할 수 있다. Project마다 사용하는 Package와 그 Version이 다르다. Sys

developnote-blog.tistory.com

하지만 더 편하게 python virtual 환경을 제공해 주는 Tool이 있습니다.

바로 pyenv입니다.

 

GitHub - pyenv/pyenv: Simple Python version management

Simple Python version management. Contribute to pyenv/pyenv development by creating an account on GitHub.

github.com

pyenv를 통해 다양한 버전관리가 가능한 python 개발환경을 구축할 수 있습니다.

이번 포스팅에서 AWS EC2에서 pyenv를 설치과정을 정리해 보았습니다.

pyenv 설치

저는 AWS EC2 t3.small / Amazon Linux 2023 인스턴스에서 설치를 진행하였습니다.

pyenv 설치하기 전에 먼저 필요한 Linux package를 설치합니다.

Ubuntu 환경에서도 필요한 package 설치를 정리하였습니다.

# Fedor, Centos
$ sudo yum groupinstall -y "Development Tools" 
$ sudo yum install -y git ncurses-devel libffi libffi-devel readline-devel bzip2-devel openssl-devel sqlite-devel

# Ubuntu
$ sudo apt-get update
$ sudo apt-get install -y gcc make zlib1g-dev libbz2-dev libncurses5-dev libffi-dev libreadline-dev libssl-dev libsqlite3-dev python3-tk tk-dev liblzma-dev

pyenv는 하나의 command로 설치가 가능합니다.

아래 project에서 해당 command 설치가 가능하도록 구성하였습니다.

 

GitHub - pyenv/pyenv-installer: This tool is used to install `pyenv` and friends.

This tool is used to install `pyenv` and friends. Contribute to pyenv/pyenv-installer development by creating an account on GitHub.

github.com

# pyenv 설치
$ cd ~
$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

$ ll ~/.pyenv
total 252
-rw-r--r--. 1 ec2-user ec2-user  48653 Apr 29 04:16 CHANGELOG.md
-rw-r--r--. 1 ec2-user ec2-user  11394 Apr 29 04:16 COMMANDS.md
-rw-r--r--. 1 ec2-user ec2-user   3380 Apr 29 04:16 CONDUCT.md
-rw-r--r--. 1 ec2-user ec2-user   6724 Apr 29 04:16 CONTRIBUTING.md
-rw-r--r--. 1 ec2-user ec2-user    680 Apr 29 04:16 Dockerfile
-rw-r--r--. 1 ec2-user ec2-user   1092 Apr 29 04:16 LICENSE
-rw-r--r--. 1 ec2-user ec2-user   1033 Apr 29 04:16 MAINTENANCE.md
-rw-r--r--. 1 ec2-user ec2-user    928 Apr 29 04:16 Makefile
-rw-r--r--. 1 ec2-user ec2-user  27886 Apr 29 04:16 README.md
drwxr-xr-x. 2 ec2-user ec2-user     19 Apr 29 04:16 bin
drwxr-xr-x. 2 ec2-user ec2-user     59 Apr 29 04:16 completions
drwxr-xr-x. 2 ec2-user ec2-user  16384 Apr 29 04:16 libexec
drwxr-xr-x. 3 ec2-user ec2-user     18 Apr 29 04:16 man
drwxr-xr-x. 6 ec2-user ec2-user    108 Apr 29 04:16 plugins
drwxr-xr-x. 5 ec2-user ec2-user     47 Apr 29 04:16 pyenv.d
drwxr-xr-x. 2 ec2-user ec2-user     92 Apr 29 04:16 src
-rw-r--r--. 1 ec2-user ec2-user 104764 Apr 29 04:16 terminal_output.png
drwxr-xr-x. 3 ec2-user ec2-user  16384 Apr 29 04:16 test

홈 디렉터리에. pyenv 폴더가 생긴 것을 확인할 수 있습니다.

추가적으로 환경변수를 세팅합니다.

$ vi ~/.bashrc

export PYENV_ROOT="$HOME/.pyenv" 
export PATH="$PYENV_ROOT/bin:$PYENV_ROOT/shims:$PATH" 

eval "$(pyenv init -)" 
eval "$(pyenv virtualenv-init -)"

$ source ~/.bashrc

환경변수까지 세팅이 끝나면 pyenv 설치가 완료됩니다.

$ pyenv
pyenv 2.3.17
Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
   --version   Display the version of pyenv
   activate    Activate virtual environment
   commands    List all available pyenv commands
   deactivate   Deactivate virtual environment
   doctor      Verify pyenv installation and development tools to build pythons.
   exec        Run an executable with the selected Python version
   global      Set or show the global Python version(s)
   help        Display help for a command
   hooks       List hook scripts for a given pyenv command
   init        Configure the shell environment for pyenv
   install     Install a Python version using python-build
   latest      Print the latest installed or known version with the given prefix
   local       Set or show the local application-specific Python version(s)
   prefix      Display prefixes for Python versions
   rehash      Rehash pyenv shims (run this after installing executables)
   root        Display the root directory where versions and shims are kept
   shell       Set or show the shell-specific Python version
   shims       List existing pyenv shims
   uninstall   Uninstall Python versions
   update      Update pyenv, its plugins including the list of available versions
   version     Show the current Python version(s) and its origin
   version-file   Detect the file that sets the current pyenv version
   version-name   Show the current Python version
   version-origin   Explain how the current Python version is set
   versions    List all Python versions available to pyenv
   virtualenv   Create a Python virtualenv using the pyenv-virtualenv plugin
   virtualenv-delete   Uninstall a specific Python virtualenv
   virtualenv-init   Configure the shell environment for pyenv-virtualenv
   virtualenv-prefix   Display real_prefix for a Python virtualenv version
   virtualenvs   List all Python virtualenvs found in `$PYENV_ROOT/versions/*'.
   whence      List all Python versions that contain the given executable
   which       Display the full path to an executable

See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme

virtual 환경 구성

pyenv으로 python virtual 환경을 구성해 보겠습니다.

먼저 구성한 python 버전을 설치합니다.

저는 python 3.7.13을 설치하였습니다.

$ pyenv install 3.7.13

Downloading Python-3.7.13.tar.xz...
-> https://www.python.org/ftp/python/3.7.13/Python-3.7.13.tar.xz
Installing Python-3.7.13...
patching file Doc/library/ctypes.rst
patching file Lib/test/test_unicode.py
patching file Modules/_ctypes/_ctypes.c
patching file Modules/_ctypes/callproc.c
patching file Modules/_ctypes/ctypes.h
patching file setup.py
patching file 'Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst'
patching file Modules/_decimal/libmpdec/mpdecimal.h
patching file setup.p
Installed Python-3.7.13 to /home/ec2-user/.pyenv/versions/3.7.13

# 버전 설치 확인
$ pyenv versions
* system (set by /home/ec2-user/.pyenv/version)
  3.7.13

설치한 3.7.13 버전으로 virtual 환경을 구성합니다.

test라는 이름으로 virtual환경을 구성해 보았습니다.

$ pyenv virtualenv 3.7.13 test

Looking in links: /tmp/tmpollp3mes
Requirement already satisfied: setuptools in /home/ec2-user/.pyenv/versions/3.7.13/envs/test/lib/python3.7/site-packages (47.1.0)
Requirement already satisfied: pip in /home/ec2-user/.pyenv/versions/3.7.13/envs/test/lib/python3.7/site-packages (22.0.4)

$ pyenv versions
* system (set by /home/ec2-user/.pyenv/version)
  3.7.13
  3.7.13/envs/test
  test --> /home/ec2-user/.pyenv/versions/3.7.13/envs/test

그럼 workspace 폴더를 생성하여 해당 path에서 virtual 환경이 세팅되도록 하겠습니다.

pyenv local command로 설정이 가능합니다.

설정 후 python 버전을 확인하면 3.7.13인 것을 확인할 수 있습니다.

$ pyenv local test
(test) [ec2-user@ip-172-31-33-5 workspace]$ python -V
Python 3.7.13

1개의 Server에서 여러 가지 python 버전을 설치해서 구성이 가능하고,

1개의 버전에서 여러 가지 독립적인 python 개발 환경을 구성할 수 있습니다.

728x90
반응형

'Programing > Python' 카테고리의 다른 글

venv  (0) 2022.03.23
Comments