Ubuntu 22.04에서 pyenv로 Python 설치하는 방법 (최신 버전·버전 변경)

Ubuntu 22.04 서버에 pyenv로 최신 Python을 설치하고, 여러 버전 설치와 프로젝트별 버전 변경, venv 가상환경과 pip 패키지 설치, 빌드 오류와 pyenv 명령을 찾을 수 없는 오류 해결, 깨…

Ubuntu 22.04Python 3.15x86_64약 18분

검증된 문서입니다

클라우드 서버를 생성하여 이 문서의 명령을 처음부터 끝까지 그대로 실행하고 확인한 문서입니다.

운영체제
Ubuntu 22.04.5 LTS · x86_64
설치 버전
Python 3.15.0, Python 3.13.16 (소스 빌드), pyenv 2.8.10
테스트 서버
DigitalOcean · 2 vCPU / 2 GB RAM / 60 GB SSD (s-2vcpu-2gb, sgp1)
마지막 확인
2026-10-16

이 문서에는 제휴 링크가 포함되어 있습니다. 링크를 통해 가입하면 코드샌드가 일정 수수료를 받을 수 있으며, 문서 내용과 평가에는 영향을 주지 않습니다.

Ubuntu 22.04 서버에 pyenv로 최신 Python을 설치하고, 여러 버전 설치와 프로젝트별 버전 변경, venv 가상환경과 pip 패키지 설치, 빌드 오류와 pyenv 명령을 찾을 수 없는 오류 해결, 깨끗하게 삭제하는 방법까지 정리합니다.

1. 준비물

  • Ubuntu 22.04 LTS 서버 또는 PC 1대
  • sudo 권한이 있는 일반 사용자 계정
  • 인터넷 연결 (GitHub와 python.org에서 파일을 내려받습니다)

서버가 없다면 DigitalOcean에서 Droplet을 생성해 보세요. pyenv는 Python을 소스 코드에서 직접 빌드하므로 CPU가 많을수록 빨리 끝납니다. 이 문서의 모든 과정은 Droplet(2 vCPU · 2GB 메모리 · 60GB SSD · Ubuntu 22.04 · 싱가포르)으로 서버를 생성하고, sudo 권한이 있는 일반 사용자 계정으로 확인했습니다.

2. 설치 전 상태 확인

Ubuntu 22.04에는 Python 3.10이 기본으로 들어 있습니다. 시스템 프로그램이 쓰는 Python이라 지우거나 다른 버전으로 바꾸면 안 됩니다.

python3 --version
Python 3.10.12

python 명령은 없습니다. Ubuntu는 python3라는 이름으로만 Python을 제공합니다.

python --version
Command 'python' not found, did you mean:
  command 'python3' from deb python3
  command 'python' from deb python-is-python3

패키지를 설치하는 pip3도 없고, 가상환경을 만드는 venv도 바로 쓸 수 없습니다.

pip3 --version
Command 'pip3' not found, but can be installed with:
sudo apt install python3-pip
python3 -m venv myenv
The virtual environment was not created successfully because ensurepip is not
available.  On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.

    apt install python3.10-venv

You may need to use sudo with that command.  After installing the python3-venv
package, recreate your virtual environment.

Failing command: /home/devuser/myenv/bin/python3

실패하면서 만들다 만 myenv 폴더가 남으므로 지웁니다. 출력은 없습니다.

rm -rf myenv

Python 3.10은 2026년 10월에 지원이 끝난 버전이고, 이 문서를 확인한 날의 최신 Python은 3.15입니다. 이 문서는 시스템 Python은 그대로 두고 pyenv로 최신 Python을 사용자 폴더(~/.pyenv)에 따로 설치합니다. pyenv는 python.org의 소스 코드를 내려받아 빌드하고, 여러 버전을 설치해 두고 명령 한 줄로 바꿔 쓸 수 있게 해 줍니다.

3. 빌드에 필요한 패키지 설치

pyenv는 Python을 직접 빌드하므로 컴파일러와 라이브러리가 필요합니다. 먼저 패키지 목록을 갱신합니다. 출력의 앞부분(Hit, Get 줄)은 생략했습니다.

sudo apt update
Fetched 27.9 MB in 9s (3046 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
52 packages can be upgraded. Run 'apt list --upgradable' to see them.

pyenv 위키에서 안내하는 빌드 패키지를 설치합니다. 컴파일러가 없으면 빌드가 실패하는 것은 9단계에서 볼 수 있습니다. 출력은 마지막 요약만 남겼습니다.

sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl git libncurses-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev libzstd-dev
8 upgraded, 166 newly installed, 0 to remove and 44 not upgraded.
Need to get 139 MB of archives.
After this operation, 503 MB of additional disk space will be used.

4. pyenv 설치

pyenv 설치 스크립트를 내려받아 실행합니다. curl -fsSL은 진행 표시 없이 내려받고, 실패하면 오류를 표시한다는 뜻입니다. 내려받은 스크립트는 | bash로 넘겨 바로 실행합니다. GitHub에서 pyenv와 플러그인을 내려받는 줄은 생략했습니다.

curl -fsSL https://pyenv.run | bash
Cloning into '/home/devuser/.pyenv'...
Cloning into '/home/devuser/.pyenv/plugins/pyenv-doctor'...
Cloning into '/home/devuser/.pyenv/plugins/pyenv-update'...
Cloning into '/home/devuser/.pyenv/plugins/pyenv-virtualenv'...
…

WARNING: seems you still have not added 'pyenv' to the load path.

# Load pyenv automatically by appending
# the following to
# ~/.bash_profile if it exists, otherwise ~/.profile (for login shells)
# and ~/.bashrc (for interactive shells) :

export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"

# Restart your shell for the changes to take effect.

마지막 경고는 pyenv를 불러오는 설정을 아직 추가하지 않았다는 안내입니다. 안내된 세 줄을 ~/.bashrc 끝에 추가합니다. Ubuntu는 로그인할 때도 ~/.bashrc를 읽으므로 이 파일에만 추가하면 됩니다. 세 명령 모두 출력이 없습니다.

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init - bash)"' >> ~/.bashrc

5. pyenv 설치 확인

설정을 추가하기 전의 터미널에서는 pyenv를 찾을 수 없다는 메시지가 표시됩니다.

pyenv --version
Command 'pyenv' not found, did you mean:
  command 'p7env' from deb libnss3-tools (2:3.98-0ubuntu0.22.04.4)
Try: sudo apt install <deb name>

안내된 패키지를 설치하지 마세요. 터미널을 닫고 새로 열거나(SSH라면 접속을 끊고 다시 접속), 아래 명령으로 ~/.bashrc를 다시 읽습니다. 출력은 없습니다.

source ~/.bashrc
pyenv --version
pyenv 2.8.10

6. Python 최신 버전 설치

3.15처럼 앞 두 자리만 적으면 그 계열의 최신 버전을 설치합니다. 소스 코드를 내려받아 빌드하므로 몇 분 걸리고, Installing Python-3.15.0... 줄이 나온 뒤에는 끝날 때까지 화면에 아무것도 표시되지 않습니다.

pyenv install 3.15
Downloading Python-3.15.0.tar.xz...
-> https://www.python.org/ftp/python/3.15.0/Python-3.15.0.tar.xz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 34.0M  100 34.0M    0     0  81.3M      0 --:--:-- --:--:-- --:--:-- 81.4M
Installing Python-3.15.0...
Installed Python-3.15.0 to /home/devuser/.pyenv/versions/3.15.0

설치된 버전을 확인합니다. system은 Ubuntu에 들어 있는 시스템 Python이고, *가 붙은 것이 지금 쓰는 버전입니다.

pyenv versions
* system (set by /home/devuser/.pyenv/version)
  3.15.0

설치만 해서는 아직 시스템 Python을 씁니다. pyenv global로 기본 버전을 3.15로 정합니다. 출력은 없습니다.

pyenv global 3.15

이제 python과 python3 모두 Python 3.15를 실행합니다. pip도 함께 설치되어 있습니다.

python --version
Python 3.15.0
python3 --version
Python 3.15.0
pip --version
pip 26.2.1 from /home/devuser/.pyenv/versions/3.15.0/lib/python3.15/site-packages/pip (python 3.15)

실행되는 python은 pyenv가 만든 shims 폴더의 파일입니다. pyenv는 이 파일을 거쳐 지금 정해진 버전의 Python을 실행합니다.

which python
/home/devuser/.pyenv/shims/python

7. 다른 버전 설치와 프로젝트별 버전 변경

설치할 수 있는 버전은 pyenv install --list로 확인합니다. 목록이 길어서 3.13 계열만 골라 마지막 3줄을 표시했습니다.

pyenv install --list | grep -E '^ *3\.13\.[0-9]+$' | tail -n 3
  3.13.14
  3.13.15
  3.13.16

Python 3.13을 추가로 설치합니다. 이것도 빌드하므로 몇 분 걸립니다.

pyenv install 3.13
Downloading Python-3.13.16.tar.xz...
-> https://www.python.org/ftp/python/3.13.16/Python-3.13.16.tar.xz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 22.1M  100 22.1M    0     0  83.9M      0 --:--:-- --:--:-- --:--:-- 83.9M
Installing Python-3.13.16...
Installed Python-3.13.16 to /home/devuser/.pyenv/versions/3.13.16
pyenv versions
  system
  3.13.16
* 3.15.0 (set by /home/devuser/.pyenv/version)

특정 프로젝트 폴더에서만 3.13을 쓰려면 그 폴더에서 pyenv local을 실행합니다. 폴더에 .python-version 파일이 만들어지고, 이 폴더와 하위 폴더에서는 이 파일에 적힌 버전이 사용됩니다.

mkdir old-project && cd old-project
pyenv local 3.13
cat .python-version
3.13
python --version
Python 3.13.16

폴더를 벗어나면 다시 기본 버전인 3.15가 사용됩니다.

cd ~
python --version
Python 3.15.0

8. venv 가상환경 만들고 패키지 설치

패키지는 프로젝트마다 가상환경을 만들어 그 안에 설치합니다. 그래야 프로젝트끼리 패키지 버전이 섞이지 않습니다. 새 터미널을 열고 hello-python 폴더에 가상환경(.venv)을 만든 뒤 켭니다(activate). 세 명령 모두 출력이 없습니다.

mkdir hello-python && cd hello-python
python -m venv .venv
source .venv/bin/activate

가상환경을 켜면 프롬프트 앞에 (.venv)가 붙습니다. 가상환경의 Python 버전을 확인하고, HTTP 요청을 보내는 requests 패키지를 설치합니다. 설치 과정의 내려받기 줄은 생략했습니다.

python --version
Python 3.15.0
pip install requests
Collecting requests
  …
Installing collected packages: urllib3, idna, charset_normalizer, certifi, requests
Successfully installed certifi-2026.7.22 charset_normalizer-3.5.2 idna-3.20 requests-2.34.2 urllib3-2.8.0

requests를 쓰는 app.py를 만들고 실행합니다. 첫 줄은 따옴표 안의 내용으로 파일을 만드는 명령이라 출력이 없습니다.

echo "import sys, requests; print('Hello Python', sys.version.split()[0], 'requests', requests.__version__)" > app.py
python app.py
Hello Python 3.15.0 requests 2.34.2

가상환경은 deactivate로 끕니다. 끈 상태에서 다시 실행하면 requests를 찾을 수 없다는 오류가 납니다. requests는 가상환경 안에만 설치되어 있기 때문입니다.

deactivate
python app.py
Traceback (most recent call last):
  File "/home/devuser/hello-python/app.py", line 1, in <module>
    import sys, requests; print('Hello Python', sys.version.split()[0], 'requests', requests.__version__)
    ^^^^^^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named 'requests'

9. 문제 해결

configure: error: no acceptable C compiler found in $PATH

3단계의 빌드 패키지를 설치하지 않고 pyenv install을 실행하면 컴파일러(gcc)가 없어 빌드가 실패합니다. 3단계의 sudo apt install을 실행한 뒤 pyenv install을 다시 실행하세요. 실패한 빌드는 자동으로 정리되므로 따로 지울 것은 없습니다.

pyenv install 3.15
Installing Python-3.15.0...

BUILD FAILED (Ubuntu 22.04 using python-build 2.8.10)

Inspect or clean up the working tree at /tmp/python-build.20261016110547.3345
Results logged to /tmp/python-build.20261016110547.3345.log
…
configure: error: in '/tmp/python-build.20261016110547.3345/Python-3.15.0':
configure: error: no acceptable C compiler found in $PATH
…
Command 'pyenv' not found, did you mean:

4단계에서 ~/.bashrc에 세 줄을 추가하기 전에 열린 터미널이라는 뜻입니다. 터미널을 닫고 새로 열거나 source ~/.bashrc를 실행하세요. 함께 안내되는 패키지는 설치하지 않습니다. 새 터미널에서도 같으면 tail -n 3 ~/.bashrc로 세 줄이 있는지 확인하세요.

sudo: python: command not found

sudo는 명령을 찾는 경로(PATH)를 시스템 기본 경로로 바꿔 실행하기 때문에 사용자 폴더의 pyenv Python을 찾지 못합니다. pyenv로 설치한 Python은 sudo 없이 실행하세요.

sudo python --version
sudo: python: command not found
ModuleNotFoundError: No module named 'requests'

가상환경 안에 설치한 패키지를 가상환경 밖에서 실행했다는 뜻입니다. 프로젝트 폴더에서 source .venv/bin/activate로 가상환경을 켠 뒤 실행하세요.

pyenv uninstall 3.13을 실행해도 버전이 지워지지 않음

pyenv install과 달리 pyenv uninstall은 앞 두 자리만 적으면 아무 메시지 없이 끝나고 버전도 지워지지 않습니다. pyenv versions에 표시되는 전체 버전 번호(3.13.16)를 적으세요.

pyenv uninstall -f 3.13
pyenv versions
  system
  3.13.16
* 3.15.0 (set by /home/devuser/.pyenv/version)
The virtual environment was not created successfully because ensurepip is not available.

시스템 Python(3.10)으로 python3 -m venv를 실행하면 나오는 메시지입니다. Ubuntu의 시스템 Python에는 가상환경을 만드는 데 필요한 패키지가 빠져 있습니다. pyenv로 설치한 Python에는 venv가 들어 있으므로, pyenv global로 버전을 정한 뒤 python -m venv로 만드세요.

10. 삭제하기

Python 버전 하나만 삭제

pyenv로 설치한 버전 하나만 지울 때는 pyenv uninstall에 전체 버전 번호를 적습니다. -f는 삭제할지 묻지 않고 바로 지운다는 뜻입니다.

pyenv uninstall -f 3.13.16
pyenv: 3.13.16 uninstalled
pyenv versions
  system
* 3.15.0 (set by /home/devuser/.pyenv/version)

pyenv와 Python 모두 삭제

pyenv와 pyenv로 설치한 Python은 모두 ~/.pyenv 폴더 안에 있습니다. 먼저 4단계에서 ~/.bashrc에 추가한 세 줄을 확인합니다.

tail -n 3 ~/.bashrc
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"

~/.pyenv 폴더와 연습용 폴더를 지우고, ~/.bashrc에서 세 줄을 지웁니다. sed -i는 파일을 바로 고친다는 뜻이고, /PYENV_ROOT/d와 /pyenv init/d는 그 글자가 들어간 줄을 지운다는 뜻입니다. 두 명령 모두 출력이 없습니다.

rm -rf ~/.pyenv ~/hello-python ~/old-project
sed -i '/PYENV_ROOT/d; /pyenv init/d' ~/.bashrc

터미널을 닫고 새로 열어 확인합니다. pyenv를 찾을 수 없고, python3가 시스템 Python으로 돌아왔으면 삭제된 것입니다. 3단계에서 설치한 빌드 패키지는 다른 프로그램을 빌드할 때도 쓰므로 그대로 두었습니다.

pyenv --version
Command 'pyenv' not found, did you mean:
  command 'p7env' from deb libnss3-tools (2:3.98-0ubuntu0.22.04.4)
Try: sudo apt install <deb name>
python3 --version
Python 3.10.12

직접 해 보기

서버가 없다면 아래 업체에서 몇 분이면 Ubuntu 서버를 만들 수 있습니다. 이 문서는 DigitalOcean 에서 검증했습니다.