Like的世界

个人总结与随想

pyenv简介——Debian/Ubuntu中管理多版本Python

| Comments

pyenv是管理Python版本的工具,它支持在多个Python版本间切换。

一、安装pyenv

1
git clone https://github.com/yyuu/pyenv.git ~/.pyenv

PYENV_ROOTpyenv init加入bash的~/.bashrc(或zsh的~/.zshrc)

1
2
3
echo 'export PATH=~/.pyenv/bin:$PATH' >> ~/.bashrc
echo 'export PYENV_ROOT=~/.pyenv' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

二、pyenv常用命令

列表可安装的Python版本

1
pyenv install -l

除了Python官方版本,还支持

  • anaconda
  • ironpython
  • jython
  • miniconda
  • pypy
  • stackless

安装指定版本的Python

1
2
pyenv install 3.5.1
pyenv rehash

它会自动下载并编译指定版本的Python源码,这需要系统安装:

1
sudo apt-get install -y build-essential zlib1g-dev libssl-dev

还可选择安装:

1
sudo apt-get install libsqlite3-dev libbz2-dev libreadline-dev

安装完成后:

  • 源码(如~/Python-3.5.1.tar.gz)缓存在.pyenv/cache目录中,在安装完后可手动删除。
  • Python版本安装在~/.pyenv/versions目录中。

卸载指定版本的Python

1
pyenv uninstall 3.5.1

设置shell的Python版本

1
pyenv shell 3.5.1

等同于

1
export PYENV_VERSION=3.5.1

清除PYENV_VERSION

1
pyenv shell --unset

三、安装pyenv-virtualenv

pyenv-virtual是pyenv的插件,它支持管理多个virtualenv

1
2
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc

创建virtualenv

1
pyenv virtualenv 3.5.1 aiohttp-virtual-env
  • 创建aiohttp-virtual-env之前,须先安装Python 3.5.1(通过系统或pyenv安装)。
  • aiohttp-virtual-env存储在~/.pyenv/versions/3.5.1/envs目录中,且在~/.pyenv/versions目录中建立同名符号链接。

删除virtualenv

1
pyenv uninstall aiohttp-virtual-env

列表virtualenv

1
pyenv virtualenvs

激活/禁用virtualenv

1
2
pyenv activate aiohttp-virtual-env
pyenv deactivate

四、配置Upstart脚本

若python程序须要通过Upstart启动,则其Upstart脚本可以类似:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# service name

description "service description ..."

respawn

setuid <username>
setgid <group>

env PYENV_ROOT=/home/<username>/.pyenv
env PATH=/home/<username>/.pyenv/bin:/sbin:/usr/sbin:/bin:/usr/bin
env PYENV_VERSION=<python version or virtualenv name>

chdir <app dir>

script
        eval "$(pyenv init -)"
        exec ./<app>
end script
# vim: ts=4 sw=4 sts=4 ft=upstart

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# service name

description "service description ..."

respawn

setuid <username>
setgid <group>

env PYENV_ROOT=/home/<username>/.pyenv
env PATH=/home/<username>/.pyenv/shims:/home/<username>/.pyenv/bin:/sbin:/usr/sbin:/bin:/usr/bin
env PYENV_VERSION=<python version or virtualenv name>

chdir <app dir>

exec ./<app>
# vim: ts=4 sw=4 sts=4 ft=upstart
  • username为服务运行的用户名,通常为PYENV_ROOT所属用户。
  • group为服务运行的组名,通常为PYENV_ROOT所属组。
  • PYENV_VERSION为Python版本号或virtualenv的名字。
  • app dir为Python程序的目录。
  • app为Python程序或启动脚本。

Comments