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/

参考连接

【腾讯云】境外1核2G服务器低至2折,半价续费券限量免费领取!
https://cloud.tencent.com/act/cps/redirect?redirect=1068&cps_key=e4b50f6c64a4480367f8a8d16fd07c5a&from=console

标签: python, pip, virtualenv, venv, deactivate, activate

添加新评论