管理 Python 环境


利用PyEnv来管理不同的Python版本,virtualenv来创建独立的python运行环境


1 编译 Python

在使用 Bash On Ubuntu On Windows 时,系统最高只支持 Python 3.4.3。所以就到 Python官网 下载最新的 3.6.1 源码。

编译时提示:

Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2                  _curses               _curses_panel
_dbm                  _gdbm                 _lzma
_sqlite3              _ssl                  _tkinter
readline
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

很明显,系统中缺少编译时需要的包。执行下面的命令安装这些缺失的内容:

sudo apt-get update
sudo apt-get install -y libbz2-dev libncurses5-dev libssl-dev libgdbm-dev liblzma-dev libsqlite3-dev tk8.6-dev libreadline6-dev

再次编译就没有提示缺少包了。

注意

  1. 这里只执行 make 进行编译,不执行 make install 安装。
  2. 参考文档中有说需要安装 build-essential 等包,但我没有遇到相关提示。

2 使用 PyEnv 来管理 Python 版本

通过 PyEnv 可以实现在系统中安装多个不同 Python 版本,并根据自己的需要选择要使用的版本。相关说明参考PyEnv 自己的帮助文档

使用 PyEnv 还有一个好处:不需要Root权限。这是因为 PyEnv 只是安装在当前用户的目录下。

2.1 安装 PyEnv

下载最新在pyenv版本:

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

设置环境变量 PYENV_ROOT 并将 $PYENV_ROOT/bin加入PATH

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

pyenv init 添加到 shell 中

echo 'eval "$(pyenv init -)"' >> ~/.bashrc

重启 shell

exec $SHELL

2.2 使用 PyEnv 安装 Python 版本

先通过 pyenv versions 查看系统当前有的 Python 版本(及当前生效的版本)。

$ pyenv versions
* system (set by /home/fht/.pyenv/version)

说明 PyEnv 目前只管理了系统本身的版本。

通过 pyenv install -l 查看 PyEnv 可以管理的版本。

通过 pyenv install -k -v 3.6.1 安装 Python 3.6.1 版本。

最后通过 pyenv global 3.6.1 将 3.6.1 版本设置成系统当前版本。

$ pyenv versions
  system
* 3.6.1 (set by /home/fht/.pyenv/version)

这样,当我们执行 python 命令时,启动的就是 3.6.1 版本,而不是系统中原先的缺省 2.7.6 版本。

可以通过 pyenv global system 命令,将 python 切换回系统原来的版本。

2.3 删除已安装的Python版本

如:通过执行下面的命令删除刚才安装的 3.6.1 版本:

pyenv uninstall 3.6.1

3 Virtualenv

Virtualenv可以用来创建独立的Python环境,防止不同软件包之间互相影响。这里只提及最简单的用法,更多内容参考:User Guide

3.1 安装 Virtualenv

执行命令

pip install virtualenv

Note: PyEnv 自带有 pipeasy_install 命令。

对于 Python 3.5 及其以上在版本,Python 中已经将 Virtualenv 相应功能集成到一个名为 venv 的包中,不再需要单独安装 Virtualenv。

3.2 创建一个测试环境

为了方便后期管理,可以考虑将测试环境和其对应的代码统一存放在一个目录下。

如:先创建一个 runtime 目录。此目录存放某一个(或一些依赖相同Python环境的) Python 工程。

进入 runtime目录下,执行下面的命令创建一个名为 test 的环境。

virtualenv test

如果是使用 Python 自带的 venv 包,则应该执行如下命令:

python -m venv test

这实际上是创建了一个名为 test 的目录。该目录下有 bin、include、lib等子目录。

test目录下的东西不需要手工维护。

3.3 使用测试环境

(假定当前在 rumtime 目录)通过下面的命令来让 test 环境生效:

source test/bin/activate

环境生效后,会在提示符前增加当前生效的环境名: (test)

这时再执行各种安装、卸载Python包的命令,就只会将影响测试环境。也就是只会在 test 目录下安装、卸载。

执行下面的命令可以让测试环境失效:

deactivate

3.4 删除测试环境

在确保测试环境失效后,直接删除对应的目录就可以了。如

deactivate
rm -r test

参考文档


声明: 本文采用 CC BY-NC-SA 3.0 协议进行授权,转载请注明出处。