pyenv
适合需要频繁切换 3.9 / 3.10 / 3.11 / 3.12 等版本。
安装依赖
shell
# Ubuntu/Debian 依赖*
sudo apt update
sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev安装 pyenv
shell
curl https://pyenv.run | bash
*# 写入 ~/.bashrc 或 ~/.zshrc*
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)" *# 可选,配合 pyenv-virtualenv*
*# 安装多个版本*
pyenv install 3.10.14
pyenv install 3.11.9
pyenv install 3.12.3
*# 全局默认*
pyenv global 3.12.3
*# 某个项目目录单独指定*
cd my-project
pyenv local 3.10.14优点:不污染系统 Python,切换方便。 注意:不要动 /usr/bin/python3,很多系统工具依赖它。
多用户共享
- 管理员:
qolome - 路径:
/server/python/pyenv - 共享组:
server_shared - 组内用户:都能执行
pyenv install
权限模型
/server/python/pyenv/
所有者: qolome
组: server_shared
权限: 组可读写执行 + 目录 setgid(新文件自动继承 server_shared 组)
这样任意组员 pyenv install 装出来的 Python,其他组员也能用。
一、初始化(qolome 或有 sudo 的账号执行)
1. 创建组、目录、加用户
shell
sudo groupadd server_shared 2>/dev/null || true
sudo usermod -aG server_shared qolome
# 其他用户示例:
# sudo usermod -aG server_shared user1
# sudo usermod -aG server_shared user2
sudo mkdir -p /server/python2. 克隆 pyenv
shell
sudo git clone https://github.com/pyenv/pyenv.git /server/python/pyenv
sudo git clone https://github.com/pyenv/pyenv-virtualenv.git \
/server/python/pyenv/plugins/pyenv-virtualenv 2>/dev/null || true3. 设置协作权限(核心)
shell
PYENV_ROOT="/server/python/pyenv"
sudo chown -R qolome:server_shared "$PYENV_ROOT"
sudo chmod -R g+rwX "$PYENV_ROOT"
sudo find "$PYENV_ROOT" -type d -exec chmod g+s {} \;
重点目录(会被 `pyenv install` 写入):
sudo mkdir -p "$PYENV_ROOT"/{versions,cache,shims}
sudo chown -R qolome:server_shared "$PYENV_ROOT"/{versions,cache,shims}
sudo chmod -R g+rwX "$PYENV_ROOT"/{versions,cache,shims}
sudo find "$PYENV_ROOT"/{versions,cache,shims} -type d -exec chmod g+s {} \;4. 编译依赖(只需装一次)
shell
sudo apt update
sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev libncursesw5-dev \
xz-utils libffi-dev liblzma-dev curl git二、全局环境变量 系统
ini
export PYENV_ROOT="/server/python/pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
# 组协作:新建文件默认对 server_shared 可写
umask 002
eval "$(pyenv init - bash)"
if [ -d "$PYENV_ROOT/plugins/pyenv-virtualenv" ]; then
eval "$(pyenv virtualenv-init - bash)"
fi
# 服务器常用:不编 tkinter,保留 pip
export PYTHON_CONFIGURE_OPTS="${PYTHON_CONFIGURE_OPTS:---disable-test-modules --with-ensurepip=install --without-tk}"