Python Virtualenv 教程
virtualenv is a tool to create isolated Python environments. Since Python 3.3, a subset of it has been integrated into the standard library under the venv module.
virtualenv是一个用于创建隔离Python环境的工具。从3.3版本开始, 标准库实现了virtualenv的一个功能子集,社区应该是考虑在标准库中集成virtualenv, 不过到目前为止,也近仅仅是个功能子集,完整的功能使用还是需要使用 pip 安装 virtualenv 包才行。
virtualenv主要是解决依赖冲突问题,如果操作系统版本的某个lib库版本较高, 和应用的低版本lib不兼容,那这时候在不影响系统python lib库的同时还能完美的支持应用的调试和使用,将非常方便python开发。也用于模拟不同的python版本环境, 比如Python 2X/3X, 这种大版本的不兼容问题隔离验证。
安装virtualenv
在正式安装virtualenv前, 我们需要先安装Python的包管理工具pip,有几种安装模式:
从系统库中直接安装pip
- RHEL/CentOS
yum -y install epel-release
yum -y install python-pip
- Debian/Ubuntu
apt -y install python-pip
- Gentoo
emerge -a dev-python/pip
- FreeBSD
pkg install py27-pip
or
pkg install py36-pip
操作系统仓库维护的pip版本可能较低,安装完成之后,执行某些包安装时可能提示pip有新版本,可以使用下述命令更新pip
pip install --upgrade pip
更新pip后,可能提示这样的信息:
root@client:~# pip install virtualenv
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name main
退出shell, 重新激活环境就好了, 或者是执行 source /etc/profile
使用 get-pip.py 安装 pip
pip官方文档库有对应的手动安装示例, 具体文档见:https://pip.pypa.io/en/stable/installing/#installation
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
使用pip安装virtualenv
有了pip对我们安装Python lib库方便多了。
pip install virtualenv
需要注意的地方是, 某些python lib库需要python的编译环境, 依赖python-devel等类似的源文件包.
virtualenv 基本使用
对Python版本没有明确要求的话, 直接使用系统Python版本构建虚拟环境:
virtualenv custom_env
这样在当前目录下就构建了一个python的virtualenv环境.
root@client:~# ll custom_env/bin/
total 3472
drwxr-xr-x 2 root root 4096 Jul 23 09:48 ./
drwxr-xr-x 6 root root 4096 Jul 23 09:48 ../
-rw-r--r-- 1 root root 2092 Jul 23 09:48 activate
-rw-r--r-- 1 root root 1424 Jul 23 09:48 activate.csh
-rw-r--r-- 1 root root 3048 Jul 23 09:48 activate.fish
-rw-r--r-- 1 root root 1804 Jul 23 09:48 activate.ps1
-rw-r--r-- 1 root root 1512 Jul 23 09:48 activate_this.py
-rwxr-xr-x 1 root root 244 Jul 23 09:48 easy_install*
-rwxr-xr-x 1 root root 244 Jul 23 09:48 easy_install-2.7*
-rwxr-xr-x 1 root root 226 Jul 23 09:48 pip*
-rwxr-xr-x 1 root root 226 Jul 23 09:48 pip2*
-rwxr-xr-x 1 root root 226 Jul 23 09:48 pip2.7*
-rwxr-xr-x 1 root root 3492656 Jul 23 09:48 python*
lrwxrwxrwx 1 root root 6 Jul 23 09:48 python2 -> python*
lrwxrwxrwx 1 root root 6 Jul 23 09:48 python2.7 -> python*
-rwxr-xr-x 1 root root 2334 Jul 23 09:48 python-config*
-rwxr-xr-x 1 root root 222 Jul 23 09:48 wheel*
激活 virtualenv 环境
root@client:~# source custom_env/bin/activate
(custom_env) root@client:~#
shell 提示已经切换到custom_env环境,接着你就可以看到python/pip命令已经切换到custom_env的环境
(custom_env) root@client:~# which python
/root/custom_env/bin/python
(custom_env) root@client:~# which pip
/root/custom_env/bin/pip
退出 virtualenv 环境
直接执行deactivate命令就退出了当前custom_env环境
(custom_env) root@client:~# deactivate
root@client:~#
指定 Python 版本构建 virtualenv 环境
有些时候, 我们希望python程序在指定的版本下运行, 就可以用virtualenv来构建指定版本的virtualenv环境.
创建一个python 2.7 virtualenv的环境:
root@client:~# virtualenv -p /usr/bin/python2.7 python27_env
Running virtualenv with interpreter /usr/bin/python2.7
Already using interpreter /usr/bin/python2.7
New python executable in /root/python27_env/bin/python2.7
Also creating executable in /root/python27_env/bin/python
Installing setuptools, pip, wheel...
done.
还有更多使用场景和配置可以参考下官方文档https://virtualenv.readthedocs.io/en/latest/