Linux Python Management (Installing and Using pyenv)
On newer Linux versions (for example, Ubuntu 24.04), using pip for system-level package management may trigger the externally-managed-environment error. In other words, the system does not allow direct global package installation with pip.
To avoid breaking the system Python environment and to manage Python versions more cleanly, I recommend using pyenv (plus virtual environments).
Install Build Dependencies
For Ubuntu/Debian:
sudo apt-get update; sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
For CentOS and similar systems:
sudo yum install -y gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel findutils
Install pyenv
Install via the official script:
curl https://pyenv.run | bash
Configure Your Shell and Apply
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
# If you use Zsh, replace .bashrc with .zshrc
source ~/.bashrc
# If you use Zsh, replace .bashrc with .zshrc
# Verify
pyenv --version
Basic pyenv Usage
# pyenv install python-version, e.g. install 3.13.3
pyenv install 3.13.3
# pyenv global python-version, e.g. set global version to 3.13.3
pyenv global 3.13.3
# pyenv local python-version, e.g. set local project version to 3.13.3
cd my-project/
pyenv local 3.13.3
# pyenv shell python-version, e.g. set shell session version to 3.13.3
pyenv shell python-version
# pyenv virtualenv python-version myproject-env, e.g. create ctf env with 3.13.3
pyenv virtualenv 3.13.3 ctf
# pyenv activate myproject-env, e.g. activate ctf env
pyenv activate ctf
# pyenv deactivate, exit virtual environment
pyenv deactivate
Leave a comment