Python--virtualenv

摘要

官方网站:https://virtualenv.pypa.io/en/stable/installation/

  • 执行python项目时都需要为其安装运行环境需要的依赖,比如有些项目需要在python2下运行,有些项目需要在python3下运行,有些项目需要安装mysqlclient依赖,有些项目需要django依赖,如果这些依赖都被安装在统一的系统环境中,势必彼此之间会造成干扰,特别是需要同一个依赖的不同版本时更是难以维护;
  • virtualenv可以为python项目创建独立的虚拟运行环境,这样不同的项目可以运行在各自独立的执行环境中而彼此之间不受干扰;
  • 在使用pycharm创建项目时,需要指定python执行器,此时就是创建的虚拟环境。

安装

pip3 install virtualenv

  • 本文使用python3的pip命令安装virtualenv,所以默认情况下创建虚拟环境时都是python3的执行环境,可以通过--python参数指定python的执行环境,详见下文『创建新的虚拟环境』

创建新的虚拟环境

virtualenv venv1 # 当前目录下创建venv1文件夹,并在其下创建python环境

  • 默认情况下,除了python本身的命令外不包含系统环境下的第三方依赖,比如系统环境已经安装好django、mysqlclient等,都不会带过来,需要重新在当前虚拟环境下安装。

  • 如果希望访问系统环境中的某些第三方依赖,可以在创建虚拟环境时执行如下命令:
    virtualenv venv1 --system-site-packages #此时当前虚拟环境就可以访问系统环境了

  • python本身支持python2和python3同时共存,可以指定python命令路径,比如使用python2的环境

1
virtualenv --python=`which python` venv1

激活虚拟环境

source activate

1
2
3
cd venv1/bin
hanqunfengdeMacBook-Pro:bin hanqunfeng$ source activate
(venv1) hanqunfengdeMacBook-Pro:bin hanqunfeng$
  • 激活后所有python相关命令都变为venv1下的命令了

退出虚拟环境

deactivate

1
2
(venv1) hanqunfengdeMacBook-Pro:bin hanqunfeng$ deactivate
hanqunfengdeMacBook-Pro:bin hanqunfeng$

删除虚拟环境

rm -rf venv1 删除venv1目录即可

python3.3自带创建虚拟环境功能

  • python3.3版本之后,python自带了创建虚拟环境的功能,使用方法如下:

1
2
3
4
5
6
7
8
9
10
11
# 创建虚拟环境
python3 -m venv venv1
# 创建虚拟环境并携带全局包
python3 -m venv venv1 --system-site-packages
# 查看已经安装的包
pip list

# 激活虚拟环境
source venv1/bin/activate
# 退出虚拟环境
deactivate
  • 可以看到,python3.3版本之后,创建虚拟环境和激活、退出虚拟环境的方法都和virtualenv一致了,但是python自带的创建虚拟环境功能,可以省去安装virtualenv的步骤。

  • 但是python自带的创建虚拟环境功能,创建的虚拟环境和virtualenv创建的虚拟环境有些区别,具体区别如下:

    • virtualenv创建的虚拟环境,可以指定python的执行环境,比如指定python2的执行环境,python自带的创建虚拟环境功能,只能指定python3的执行环境;
    • virtualenv创建的虚拟环境,可以指定系统环境下的第三方依赖,python自带的创建虚拟环境功能,只能创建python3的虚拟环境,系统环境下的第三方依赖都不存在;

小贴士

  • 当我们不使用虚拟环境时,有时候系统里安装了好几个版本的python,此时pip命令会自动选择当前系统里python的最新版本,这样就有可能造成python版本混乱,从而影响项目运行;
  • 使用virtualenv创建的虚拟环境,可以保证当前项目运行的python版本和目标的python的版本一致,从而避免版本混乱;
  • 或者运行pip时通过python命令指定python的执行环境,比如:python3 -m pip install xxx,这样就可以保证当前项目运行的python版本和目标的python的版本一致;

发布到其它环境时创建依赖文件

  • 创建依赖文件:pip freeze > requirements.txt

  • 发布到其它环境时安装依赖:pip install -r requirements.txt